Ricerca…


Un StackView complesso all'interno dell'esempio di Scrollview

Segue un esempio di cosa può essere fatto con StackViews nidificati, dando all'utente l'impressione di un'esperienza di scorrimento continuo che utilizza elementi o allineamenti di un'interfaccia utente complessi.

Un StackView complesso all'interno dell'esempio di Scrollview

Prevenire il layout ambiguo

Una frequente domanda su StackViews all'interno di Scrollviews deriva da ambigui avvisi / heigh sul builder dell'interfaccia. Come ha spiegato questa risposta , è necessario:

  1. Aggiungi in UIScrollView a UIView (the contentScrollView);
  2. In questo contenutoScrollView, imposta i margini superiore, inferiore, sinistro e destro su 0
  3. Impostare anche allineare il centro orizzontalmente e verticalmente;

Scorrimento verso il contenuto all'interno di StackViews nidificati

Il grande trambusto sullo scorrimento è determinare l'offset necessario per presentare (ad esempio) un campo di testo all'interno di uno StackView con all'interno del ScrollView .

Se si tenta di ottenere la posizione di Textfield.frame.minY può essere 0 , poiché il frame minY considera solo la distanza tra l'elemento e la parte superiore dello StackView. Quindi devi considerare tutte le altre visualizzazioni / viste dello stack genitore.

Una buona soluzione per questo è:

1 - Implementa l'estensione 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)
    }

}

Questo considererà tutte le viste genitore e sommerà l'offset necessario per la vista a scorrimento presenti la vista necessaria sullo schermo (per esempio un campo di testo che non può rimanere dietro la tastiera dell'utente)

Esempio di utilizzo:

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow