基本的にモバイル版のウェブサイトのラッパーである iPhone アプリを作成しています。チャット ページでテキスト領域を選択すると、キーボードの上の領域に合わせて Web ビューのサイズを変更する必要があります。
ただし、keyboardwillshow で uiwebview のフレームを変更すると、テキストエリアのフォーカスがキャンセルされます。キーボードが表示されているときにテキストエリアをもう一度タップすると、フォーカスされます。
また、フレームの代わりに境界を変更しようとしました。そのとき、テキストエリアはフォーカスを取得しましたが、どういうわけか、元の境界の上部ではなく下部に固定されました。誰もこの問題の経験がありますか?
EDIT:keyboardWillShowの代わりにkeyboardDidShowでwebviewのサイズを変更することで、最初の問題を修正しました。ただし、サイズ変更時にサイトが適切に更新されないようで、サイトのヘッダーがビューに表示されません。以下のコードを現在の状態に編集しました。
- (void)updateBounds {
CGRect appFrame = [UIScreen mainScreen].applicationFrame, newFrame;
if (!kbFrame.size.width) {
// no keyboard
newFrame = appFrame;
} else if (kbFrame.size.width == appFrame.size.width) {
// horizontal keyboard (relative to straight oriented device)
newFrame = CGRectMake(0, 0, appFrame.size.width, appFrame.size.height - kbFrame.size.height);
}
else {
newFrame = CGRectMake(0, 0, appFrame.size.width - kbFrame.size.width, appFrame.size.height);
}
webview.frame = newFrame;
}
- (void)keyboardDidShow:(NSNotification *)note {
NSLog(@"keyboardShow");
[[note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue: &kbFrame];
[self updateBounds];
}
- (void)keyboardWillHide:(NSNotification *)note {
NSLog(@"keyboardHide");
kbFrame.size.width = 0;
[self updateBounds];
webview.frame = [UIScreen mainScreen].applicationFrame;
}