2016-06-02 13 views
0

Ich habe einen ViewController, der eine TabelleView hat und zwei Ansichten über der Tabellenansicht hat. Ich muss eine Ansicht reduzieren (im Bild rot umrandet), wenn der Benutzer nach oben scrollt und eine andere Ansicht (orangene Schaltfläche) mit der Tabelle nach oben bewegt. Ich plane, die delegate-Methode scrollViewDidScroll zu verwenden, um den Offset der Tabelle zu ermitteln und das Kollabieren damit zu behandeln.Ein Bild nach oben scrollen (iOS)

Wie gehe ich bei der Implementierung dieses?

enter image description here enter image description here

//Custom delegate method, which returns offset of scrollViewDidScroll 
func didScrollScrollView(offset: CGFloat){ 
    print(offset) 
    //I have the offset, which is -30 on load. How do I implement collapsing of the view highlighted in red? 

} 

Antwort

0

Sie brauchen den Rahmen der Ansicht oder besser seine heightConstraint zuzugreifen. Wenn Sie einen Verweis auf die heightConstrain haben, können Sie tun:

var previousOffset: CGFloat = -30 
func didScrollScrollView(offset: CGFloat){ 
    let diff = previousOffset - offset 
    previousOffset = offset 

    var newHeight = heightConstraint.constant + diff 

    if newHeight < 0 { 
     newHeight = 0 
    } else if newHeight > 60 { // or whatever 
     newHeight = 60 
    } 
    heightConstraint.constant = newHeight 
} 

Wenn Sie nicht über Automatische Anordnung verwenden müssen die Rahmen manualy aktualisieren.

Auch gesetzt clipsSubviews = true (clippedToBounds) in Interface Builder oder in Code

+0

seine Herstellung der Header kleiner, aber die Innen Etiketten schrumpfen –

+0

nicht Dies ist die Antwort, obwohl es in dem Code einige Bearbeitung sein muss (Sie haben ein Gleichheitszeichen in der letzten Zeile vergessen, benötigen geschweifte Klammern für if-Anweisung). Stellen Sie sicher, dass die Einstellung clippedToBounds = true der Ansicht oder im Storyboard ausgeführt wird. –

+0

Oh ja natürlich, ich tippte frei ohne XCode, sorry für Syntaxfehler –

Verwandte Themen