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.

En komplex StackView i Scrollview-exempel

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:

  1. Lägg till i UIScrollView en UIView (contentScrollView);
  2. I detta innehållScrollView, ställ in marginalerna för topp, botten, vänster och höger till 0
  3. 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)
}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow