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 ,然后調(diào)用 becomeFirstResponder ,啟動app,第1次彈出鍵盤時,會走進兩次通知,打印鍵盤高度:
keyboardFrame height: 125.000000 keyboardFrame height: 302.000000
這兩個高度都是錯誤的,會導(dǎo)致鍵盤上面的工具條錯位:
第2次彈出鍵盤時:打印鍵盤高度為:
keyboardFrame height: 248.000000
這時候就是正常的高度了。
需要解決第一次異常的問題。
解決:直接取子view判斷
查看層級,發(fā)現(xiàn)鍵盤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; }
總結(jié)
到此這篇關(guān)于iOS橫屏彈鍵盤的高度錯誤異常解決的文章就介紹到這了,更多相關(guān)iOS橫屏彈鍵盤高度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
實例講解設(shè)計模式中的命令模式在iOS App開發(fā)中的運用
這篇文章主要介紹了設(shè)計模式中的命令模式在iOS App開發(fā)中的運用,文中還講到了Cocoa框架下使用的例子,實例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-03-03IOS UI學(xué)習(xí)教程之區(qū)分NSBundle和NSURL(讀取文件、寫入文件)
這篇文章主要為大家詳細介紹了IOS UI學(xué)習(xí)教程之區(qū)分NSBundle和NSURL,如何讀取、寫入文件,感興趣的小伙伴們可以參考一下2016-03-03iOS開發(fā)創(chuàng)建frame實現(xiàn)window窗口view視圖示例
這篇文章主要為大家介紹了iOS開發(fā)創(chuàng)建frame實現(xiàn)window窗口view視圖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05IOS UI學(xué)習(xí)教程之使用UIImageView控件制作動畫
這篇文章主要為大家詳細介紹了IOS UI學(xué)習(xí)教程之使用UIImageView控件制作動畫,感興趣的小伙伴們可以參考一下2016-03-03iOS 用Swipe手勢和動畫實現(xiàn)循環(huán)播放圖片示例
本篇文章主要介紹了iOS 用Swipe手勢和動畫實現(xiàn)循環(huán)播放圖片示例,非常具有實用價值,需要的朋友可以參考下。2017-03-03