iOSアプリケーションでは、superviewにバインドされた上下、下、上、下の制約を持つautolayoutを使用してストーリーボードにUIScrollviewを設定しています。スクロールビューの中で私は垂直に積み重ねられた複数のUITextviewsとstackviewを持っています。 scrollviewのcontentsizeはうまく設定されており、上下にスクロールすることもできます。UITextview UIScrollViewに埋め込まれている場合のキーボード処理
ここで私の問題は、キーボードの操作で発生します。私はAppleのドキュメントで推奨キーボードと同じように扱うています:Apple's Keyboard handling documentation
質問にちょうど参考のために、以下に示すが、それはかなりAppleの例の単なるコピー&ペーストだされた特定のコード:
func keyboardDidShow(notification: NSNotification){
var info = notification.userInfo!
let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size
let contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize!.height, 0.0)
self.scrollView.contentInset = contentInsets
self.scrollView.scrollIndicatorInsets = contentInsets
var aRect : CGRect = self.view.frame
aRect.size.height -= keyboardSize!.height
if self.activeTextView != nil {
if (!aRect.contains(self.activeTextView!.bounds)){
self.scrollView.scrollRectToVisible(self.activeTextView!.frame, animated: true)
}
}
}
マイキーボード処理コードはUITextFieldsで正常に動作しますが、UITextFieldsでは機能しません。 self.scrollView.scrollRectToVisible(self.activeTextView!.frame, animated: true)
が呼び出されますが、スクロールは発生しません。
私は少しを調査し、AppleはUIScrollViewの内側にUITextViewを埋め込むことをお勧めしていないことが分かった:Placing a text view inside of a scroll view
は、スクロールビューの内側のテキストビューを配置します。テキストビューは、独自のスクロールを処理します。スクロールビューにテキストビューオブジェクトを埋め込むべきではありません。そうすると、2つのオブジェクトのタッチイベントが混在して誤って処理される可能性があるため、予期しない動作が発生する可能性があります。
しかし、私は実際には、UITextFieldsと同じように非表示のtextviewをスクロールする必要があります。助言がありますか??
PS:autolayoutを使用してcontentsizeに合わせてUITextViewsを既に自動調整しているので、UITextViewsのスクロールを無効にしても構いません。
それは私のユースケースのためにやり過ぎだろうが、良いライブラリのように思えます。おそらく大きなプロジェクトのために。しかし私のユースケースでは、KevinMの答えは素晴らしいものでした。 –