キーボードをかわすためUITextView
に を使用しているがあります。NSLayoutConstraint
制約は次のとおりです。
self.textViewBottomConstraint = [NSLayoutConstraint constraintWithItem:textView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0.0];
[self.view addConstraint:self.textViewBottomConstraint];
キーボードが表示/非表示になると、制約定数をキーボードの高さに設定して制約をアニメーション化します。ただし、これを行うと何らかの理由で contentSize が {0,0} にリセットされ、スクロールが中断されます。contentSize をリセット前の状態にリセットするためのハックを追加しましたhandleKeyboardDidHide:
が、これには、スクロール位置がリセットされたり、入力が開始されるまでビューがカーソル位置にスクロールされないなど、いくつかの醜い副作用があります。
- (void) handleKeyboardDidShow:(NSNotification *)notification
{
CGFloat height = [KeyboardObserver sharedInstance].keyboardFrame.size.height;
self.textView.constant = -height;
[self.view layoutIfNeeded];
}
- (void) handleKeyboardDidHide:(NSNotification *)notification
{
// for some reason, setting the bottom constraint resets the contentSize to {0,0}...
// so let's save it before and reset it after.
// HACK
CGSize size = self.textView.contentSize;
self.textView.constant = 0.0;
[self.view layoutIfNeeded];
self.textView.contentSize = size;
}
この問題を完全に回避する方法を知っている人はいますか?