iOS
UIScrollView med StackView-barn
Sök…
En komplex StackView i Scrollview-exempel
Här följer ett exempel på vad som kan göras med kapslade StackViews, vilket ger användaren intryck av en kontinuerlig rullningsupplevelse med komplexa användargränssnittselement eller justeringar.
Förhindrar tvetydig layout
En vanlig fråga om StackViews i Scrollviews kommer från tvetydiga med / höjdvarningar på gränssnittsbyggaren. Som det här svaret förklarades är det nödvändigt att:
- Lägg till i UIScrollView en UIView (contentScrollView);
- I detta innehållScrollView, ställ in marginalerna för topp, botten, vänster och höger till 0
- Ställ också in mitt mitt horisontellt och vertikalt;
Bläddra till innehåll i kapslade StackViews
Det stora spelet med rullning är att bestämma den offset som krävs för att presentera (till exempel) ett textfält i en StackView med är inuti ScrollView .
Om du försöker få platsen för Textfield.frame.minY
kan vara 0 , eftersom minY-ramen bara överväger avståndet mellan elementet och toppen av StackView. Så du måste ta hänsyn till alla andra överordnade stapelvisningar / vyer.
En bra lösning för detta är:
1 - Implementera ScrollView-tillägget
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)
}
}
Detta kommer att ta hänsyn till alla överordnade vyer och summera den nödvändiga förskjutningen för bläddringsvyn och visa den nödvändiga vyn på skärmen (till exempel ett textfält som inte kan stanna bakom användartangentbordet)
Exempel på användning:
func textViewDidBeginEditing(_ textView: UITextView) {
self.contentScrollView.scrollToShowView(view: textView)
}