で表示されている Web ページがありUIWebView
ます。入力フォームがあるのでUIWebView
、キーボードが呼び出されたときに上に移動し、キーボードが閉じられたときに下に移動して、選択した入力フィールドが中央にくるようにします。以下のコード:
-(void)keyboardWillShow:(NSNotification*) aNotification {
float offset = [self calculateYOffsetForKeyboard];
[UIView animateWithDuration:0.3f delay:0.05f options:UIViewAnimationOptionBeginFromCurrentState animations:^ {
self.web.frame = CGRectMake(webView_rect_x, offset, self.web.scrollView.frame.size.width, self.web.scrollView.frame.size.height);
} completion:nil];
}
-(void)keyboardWillHide: (NSNotification*) aNotification {
[UIView animateWithDuration:0.3f delay:0.05f options:UIViewAnimationOptionBeginFromCurrentState animations:^ {
self.web.frame = CGRectMake(webView_rect_x, 0, self.web.scrollView.frame.size.width, self.web.scrollView.frame.size.height);
} completion:nil];
}
ここで奇妙な部分があります。これを行うと (入力フィールドをタップしてキーボードを呼び出し、[完了] をタップしてキーボードを閉じます)、左上の 4 分の 1 以外のすべてが操作できなくUIWebView
なります。見栄えがよく、上下に完全にアニメーション化され、コンテンツが適切に表示されますが、中心点の右または下はタッチに反応しません (つまり、いくつかのボタンを押すことができないなど)。
なぜこれが起こるのでしょうか?行をコメントアウトし、問題を引き起こしているのは「self.web.frame」であると判断しました。その動きを削除すると、正常に動作します。NSLog
「self.web.scrollView.frame.size.width」と「self.web.scrollView.frame.size.height」の値も調べましたが、期待どおりに変化し、通常に戻っているようです。また、calculateYOffsetForKeyboard
メソッドは適切な値を返します (選択されたフィールドに基づいて変化しますが、通常は -108.5 前後です)。
では、なぜフレームを前後に動かすと、タッチに対するビューの応答能力が変わるのでしょうか? 何か案は?