Dies ist meine Ansicht, auf der linken Seite ist die Ansicht, wenn die Tastatur nicht angezeigt wird und auf der rechten Seite ist das, was ich erreichen möchte, wenn die Tastatur angezeigt wird.ContentInset von scrollView
Alle meine Felder zu einem Scrollview hinzugefügt werden, die ich dann Einschränkungen wie folgt festgelegt wird field1 topConstraint auf Scroll oben und field4 bottomConstraint ist auf Scroll Boden. Alle anderen Felder sind mit dem folgenden verknüpft.
Wie Sie von der rechten Mock-up sehen können, wenn Tastatur angezeigt wird, möchte ich die Ansicht so nachjustieren. Also, was ich tue jetzt:
func keyboardWillShow(notification: NSNotification) {
self.field2.snp_updateConstraints { make -> Void in
make.bottom.equalTo(self.field3.snp_top).offset(8)
}
damit ich den großen Raum zwischen field2 und field3 anpassen, so weit so gut. Ich gehe auf dann die contentInset einzustellen:
let contentInset = UIEdgeInsetsMake(0, 0,getKeyboardSize(notification).height, 0)
self.scrollView.contentInset = contentInset
self.scrollView.scrollIndicatorInsets = contentInset
aber die Scrollview ist so, wie ich will nicht einstellen, weil field3 noch halb hinter der Tastatur versteckt ist.
Der Grund für diesen Post ist, dass ich nicht verstehe, wie contentIsets mit scrollView arbeitet und ich möchte vermeiden, contentOffset manuell zu setzen, wenn das überhaupt möglich ist.
Es scheint ein Problem mit den Einschränkungen zu geben, die ich festlege. Die aktuelle Einschränkung für Feld4 ist, dass ich es an die Ansicht gebunden habe und nicht unten scrollen, und ich setze jede Kante der Bildlaufansicht so, dass sie an die Ansicht gebunden ist.
Updates: Wenn gesetzt i field4 untere Beschränkung auf die Scrollview gebunden werden, die scrollViews Höhe 0, Wie kann es nicht wissen, welche Größe sollte es sein, wenn ich vor nur die Scrollview gesetzt, so groß zu sein, wie die Aussicht selbst? Das hat wirklich verwirrte mich ..
Updates 2 ich die Scroll Einschränkungen wie diese Einstellung:
self.scrollView.snp_makeConstraints { make -> Void in
make.top.equalTo(self.snp_topLayoutGuideBottom)
make.left.right.equalTo(self.view)
make.bottom.equalTo(self.snp_bottomLayoutGuideBottom)
}
Und von der UIDebugger kann ich sehen, dass die Höhe des Scroll das gleiche ist, aber die Y-Koordinate hat sich auf 20 geändert, aber ich kann immer noch nicht darin blättern ?? Auch beim Debuggen kann ich einstellen, dass die scrollViews contentSize größer als der Frame ist, dh es sollte scrollbar sein, ist es aber nicht.
Update 3 Ich bin jetzt zu dem Verständnis gekommen, dass Field1 und Field4 beide ScrollViews oben und unten angefügt werden müssen. Daher gibt es einen Unterschied zwischen scrollViews frame und scrollViews contentSize, da es so aussieht, als ob contentSize> frame scrollView scrollbar ist. Das ist also ein großer Schritt für mich und das einzige komische Ding ist jetzt das contentInset.
Mein Verständnis mit dem contentInset ist, dass Sie angeben, um wie viel die Ansicht in beide Richtungen verkleinert werden sollte. So, wie es jetzt ist, mache ich die Einfügung mit der Höhe der Tastatur am unteren Rand der ScrollView, aber es scrollt nicht, aber wenn ich die oberste contentInset auf eine zufällige negative Ziffer wie -100 setze, scrollt es, warum? Dieses Verhalten wird nicht erreicht, wenn der untere Einschub angepasst wird.
Sie wollen also nicht Ihr "Feld 4" bewegen, es sollte unabhängig von der Tastatur sein, oder? Es tut mir leid, eigentlich habe ich keine Erfahrungen in diesem Bereich, also hilft mein Kommentar wahrscheinlich nicht viel. Aber ich will nur sehen, ob ich das richtig verstehe, da mich auch die Antwort auf deine Frage interessiert. – Andrej
Ja genau, field4 sollte nicht bewegen. –