Recherche…


Un exemple complexe de StackView dans Scrollview

Voici un exemple de ce qui peut être fait avec StackViews imbriqués, donnant à l'utilisateur l'impression d'une expérience de défilement continu utilisant des éléments d'interface utilisateur ou des alignements complexes.

Un exemple complexe de StackView dans Scrollview

Prévention de la mise en page ambiguë

Une question fréquente à propos de StackViews dans Scrollviews provient des alertes ambiguës avec / heigh sur le générateur d'interface. Comme l'explique cette réponse , il est nécessaire de:

  1. Ajouter dans UIScrollView un UIView (le contentScrollView);
  2. Dans ce contentScrollView, définissez les marges supérieure, inférieure, gauche et droite sur 0
  3. Définir également aligner le centre horizontalement et verticalement;

Faire défiler le contenu à l'intérieur de StackViews imbriquées

Le gros truc sur le défilement consiste à déterminer le décalage nécessaire pour présenter (par exemple) un Textfield dans un StackView avec est à l'intérieur de ScrollView .

Si vous essayez d'obtenir la position de Textfield.frame.minY peut être 0 , car le frame minY ne prend en compte que la distance entre l'élément et le sommet du StackView. Donc, vous devez tenir compte de toutes les autres vues / vues de la pile parente.

Une bonne solution consiste à:

1 - Implémenter l'extension ScrollView

extension UIScrollView {

    func scrollToShowView(view: UIView){
        var offset = view.frame.minY
        var superview = view.superview
        while((superview  != nil)){
            offset += (superview?.frame.minY)!
            superview = superview?.superview
        }
        
        offset -= 100 //optional margin added on offset
        
        self.contentOffset = CGPoint.init(x: 0, y: offset)
    }

}

Cela prendra en compte toutes les vues parentes et la somme des décalages nécessaires pour la vue de défilement présente la vue nécessaire à l'écran (par exemple, un champ de texte qui ne peut pas rester derrière le clavier de l'utilisateur)

Exemple d'utilisation:

func textViewDidBeginEditing(_ textView: UITextView) {
    self.contentScrollView.scrollToShowView(view: textView)
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow