1

で表示されている 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 前後です)。

では、なぜフレームを前後に動かすと、タッチに対するビューの応答能力が変わるのでしょうか? 何か案は?

4

0 に答える 0