91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS橫屏彈鍵盤的高度錯誤異常怎么辦

發布時間:2021-04-15 14:36:00 來源:億速云 閱讀:314 作者:小新 欄目:開發技術

小編給大家分享一下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\n", keyboardFrame.size.height);

    [self showWithAnimationDuration:animationDuration keyboardFrame:keyboardFrame];
}

彈出新window,rootViewController里面有個 UITextField ,然后調用 becomeFirstResponder ,啟動app,第1次彈出鍵盤時,會走進兩次通知,打印鍵盤高度:

keyboardFrame height: 125.000000
keyboardFrame height: 302.000000

這兩個高度都是錯誤的,會導致鍵盤上面的工具條錯位:

iOS橫屏彈鍵盤的高度錯誤異常怎么辦

第2次彈出鍵盤時:打印鍵盤高度為:

keyboardFrame height: 248.000000

這時候就是正常的高度了。

需要解決第一次異常的問題。

解決:直接取子view判斷

iOS橫屏彈鍵盤的高度錯誤異常怎么辦

查看層級,發現鍵盤window有個子view UIInputSetHostView,這就是鍵盤顯示的父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: 方法為 UIView 的分類方法:

- (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橫屏彈鍵盤的高度錯誤異常怎么辦”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ios
AI

绥芬河市| 武功县| 本溪市| 陈巴尔虎旗| 大竹县| 黑河市| 扶沟县| 尼玛县| 乌审旗| 格尔木市| 依安县| 吉首市| 宜良县| 纳雍县| 巴林右旗| 沂南县| 昔阳县| 湖南省| 信宜市| 福建省| 慈溪市| 彩票| 伊宁县| 荔波县| 泉州市| 临西县| 桑日县| 永安市| 屯昌县| 师宗县| 兴安盟| 曲靖市| 宁海县| 榆中县| 黑龙江省| 仲巴县| 通化市| 柯坪县| 四平市| 盐源县| 陇西县|