iOSの横画面弾キーボードの高度エラーが異常解決されました。
問題:横画面の下で一回目のポップアップキーボードの高さが異常です。
2回目のキーボードのポップアップ時:キーボードの高さは次の通りです。
初めての異常な問題を解決する必要があります。
解決:直接に子viewを取って判断する
階層を見ると、キーボードのwindowにサブビューがあることが分かりました。これはキーボードで表示されている父viewです。この時にこのviewを取得すると、キーボードの本当の高さを取得します。
ここでiOSの横画面とキーボードの高さの違いについて異常解決した文章を紹介します。iOSの横画面とキーボードの高さについては、以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。
- (void)handleKeyboardWillShowNotification:(NSNotification *)notification {
NSTimeInterval animationDuration = 0;
CGRect keyboardFrame = CGRectZero;
NSDictionary *userInfo = [notification userInfo];
[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];
[[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardFrame];
printf("keyboardFrame height: %f
", keyboardFrame.size.height);
[self showWithAnimationDuration:animationDuration keyboardFrame:keyboardFrame];
}
新しいwindowを弾いて、rootView Controllerの中にUITText Fieldがあって、それからbecome First Responderを呼び出して、appをスタートして、第1回キーボードを弾いた時、2回の通知に入ることができて、キーボードの高さを印刷します:
keyboardFrame height: 125.000000
keyboardFrame height: 302.000000
この二つの高さは間違っています。キーボードの上のツールバーが間違っています。2回目のキーボードのポップアップ時:キーボードの高さは次の通りです。
keyboardFrame height: 248.000000
この時は普通の高さです。初めての異常な問題を解決する必要があります。
解決:直接に子viewを取って判断する
階層を見ると、キーボードのwindowにサブビューがあることが分かりました。これはキーボードで表示されている父viewです。この時にこのviewを取得すると、キーボードの本当の高さを取得します。
- (CGFloat)keyboardHeight {
UIWindow *keyboardWindow = [[[UIApplication sharedApplication] windows] lastObject];
UIView *inputView = [keyboardWindow.rootViewController.view tkp_findSubview:@"UIInputSetHostView"];
if (inputView) {
return inputView.tkp_height;
}
return 0;
}
そのうちtkp_findSubview:方法はUID Viewの分類方法です。
- (UIView *)tkp_findSubview:(NSString *)name {
return [self tkp_findSubview:name resursion:NO];
}
- (UIView *)tkp_findSubview:(NSString *)name resursion:(BOOL)resursion {
Class class = NSClassFromString(name);
for (UIView *subview in self.subviews) {
if ([subview isKindOfClass:class]) {
return subview;
}
}
if (resursion) {
for (UIView *subview in self.subviews) {
UIView *tempView = [subview tkp_findSubview:name resursion:resursion];
if (tempView) {
return tempView;
}
}
}
return nil;
}
締め括りをつけるここでiOSの横画面とキーボードの高さの違いについて異常解決した文章を紹介します。iOSの横画面とキーボードの高さについては、以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。