自動レイアウトとスタックビューで何かを達成しようとしています。私は、下に示すように、UIView、UITextView、およびUIViewを持つ垂直Stackviewを持っています。スクロールを有効にしてスタックビュー内でUITextViewを展開する
私はここで、前の答えをチェックアウトしたが、これを達成するためのクリーンな解決策を見つけることができませんでした。
UITextView
は編集可能であり、ユーザーが入力すると展開する必要があります。このため、IBのUITextView
のスクロールを無効にしました。私はまた、UITextViewで設定された高さの制約が "より大きいか等しい" 10に設定され、行数が0に設定されているため、ユーザーが入力する間に実行時に内在する高さが使用されます。 UIStackView
の下端がキーパッドのアクセサリの上端に達するまで、UITextViewの展開を続行したい。私はいくぶん私のスタックビューは、Superviewの上端、後端、および前縁に固定されたUITextView
の部分を拡張することができましたが、私はそれを理解することができるstackview needs Y position or height
というエラーが発生し続けますが、 UITextViewは単に展開されません。
キーボードアクセサリビューの上端に達したときにUITextViewの展開を停止する方法もわかりません。
私はこれまで
let allowedHeight = self.view.frame.height - (self.keyboardHeight! + self.accessory.frame.height)
基本的にkeyboardheight +アクセサリビューの高さを減算することによってビューフレームに許容高さを見つけるされたコード。この計算は正しく行われます。次に、UITextView
のスクロールを有効/無効にするだけで動作することを期待して、これを実行します(textViewDidChange
)。しかし、テキスト全体の表示がすべてのキーストロークで奇妙に上下にジャンプするので、明らかにしません。
func textViewDidChange(_ textView: UITextView) {
if stackView.frame.height >= allowedHeight{
textView.isScrollEnabled = true
}
if stackView.frame.height < allowedHeight{
textView.isScrollEnabled = false
}
}
私が探しているものを達成する最良の方法は何ですか?
ありがとう、ありがとうコードです。私はこれを試してみましょう。 – Annjawn
これは完璧に動作しています。 iPhone Xの1つの注意点iPhone Xの安全領域は何らかの理由でデフォルトでyオフセットに22ポイントを追加するので、スタックビューのyオフセットを追加するだけで、キーボードの背後にあるすべてのものが22ピクセルだけ押し下げられていました。世界の終わりではなく、容易に修正可能です。ありがとうございました! – Annjawn