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の横画面とキーボードの高さについては、以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。