これは私の見解です。左側はキーボードが表示されていないときの表示で、右側はキーボードが表示されているときの表示です。コンテンツスクロールビュー
すべての私のフィールドは、私は、このような制約を設定し、フィールド1 topConstraintがscrollViewの先頭に設定され、FIELD4 bottomConstraintがscrollViewの下に設定されていることをscrollViewに追加されます。他のフィールドはすべて下のフィールドに付けられます。
右のモックアップからわかるように、キーボードが表示されているときに、そのようなビューを再調整したいと思います。それでは、私が今やっていることです。これで
func keyboardWillShow(notification: NSNotification) {
self.field2.snp_updateConstraints { make -> Void in
make.bottom.equalTo(self.field3.snp_top).offset(8)
}
私はこれまでのところ、とても良いフィールド2とフィールド3との間に大きなスペースを調整します。私はその後、contentInsetを設定するために行く:
let contentInset = UIEdgeInsetsMake(0, 0,getKeyboardSize(notification).height, 0)
self.scrollView.contentInset = contentInset
self.scrollView.scrollIndicatorInsets = contentInset
が、フィールド3はまだキーボードの後ろ半分が隠れているので、scrollViewは、私が望むように調整されていません。
この投稿を投稿する理由は、contentInsetsがscrollViewでどのように動作しているかを明確に理解できていないため、手動でcontentOffsetを設定しないようにしたいと考えています。
設定している制約に問題があるようです。現在のfield4の制約は、scrollViewの底面ではなくビューに結びつけるように設定し、scrollViewの各端をビューに結び付けることです。
更新: 私はscrollViewに拘束されることをFIELD4下の制約を設定した場合、scrollViewsの高さが0で、どのようにそれはない私は以前ほど大きなことscrollViewを設定した場合、それがどうあるべきかのサイズを知ることができますビュー自体?これは本当に私はこのようなscrollViewの制約を設定していアップデート2 ...
私を混同しています
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)
}
をそしてUIDebuggerから、私はscrollViewの高さが同じであることがわかりますが、 Y座標が20に変更されましたが、まだスクロールできませんか?また、デバッグ時にscrollViews contentSizeをフレームより大きく設定することができます。つまり、スクロール可能にする必要がありますが、そうではありません。
更新3 Field1とField4の両方をscrollViewsの上端と下端に取り付ける必要があることを理解しました。したがって、scrollViewsフレームとscrollViews contentSizeの間には違いがあります。なぜなら、contentSize> frameのscrollViewがスクロール可能なときに意図的に機能するからです。 これは私にとって大きな一歩であり、奇妙なことはcontentInsetだけです。
私がcontentInsetを理解したことは、ビューがどちらの方向に縮小するかを指定することです。だから、私は今scrollviewの下部にあるキーボードの高さでインセットをしていますが、スクロールしていませんが、-100のようなランダムな負の数字にトップのcontentInsetを設定すると、スクロールされます下の挿入図が調整されているときにこの動作は達成されませんか?
「フィールド4」を移動したくないので、キーボードとは独立しているはずです。申し訳ありませんが、実際に私はこの分野での経験がないので、私のコメントはあまり役に立たないでしょう。しかし、ちょうど私が正しく理解しているかどうかを知りたいのですが、あなたの質問に対する答えにも興味があります。 – Andrej
正確には、フィールド4は移動しないでください。 –