iOS
UIScrollView con figlio StackView
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.
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:
- Aggiungi in UIScrollView a UIView (the contentScrollView);
- In questo contenutoScrollView, imposta i margini superiore, inferiore, sinistro e destro su 0
- 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)
}