iOS橫屏彈鍵盤(pán)的高度錯(cuò)誤異常解決
問(wèn)題:橫屏下第一次彈出鍵盤(pán)高度異常
- (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里面有個(gè) UITextField ,然后調(diào)用 becomeFirstResponder ,啟動(dòng)app,第1次彈出鍵盤(pán)時(shí),會(huì)走進(jìn)兩次通知,打印鍵盤(pán)高度:
keyboardFrame height: 125.000000 keyboardFrame height: 302.000000
這兩個(gè)高度都是錯(cuò)誤的,會(huì)導(dǎo)致鍵盤(pán)上面的工具條錯(cuò)位:
第2次彈出鍵盤(pán)時(shí):打印鍵盤(pán)高度為:
keyboardFrame height: 248.000000
這時(shí)候就是正常的高度了。
需要解決第一次異常的問(wèn)題。
解決:直接取子view判斷
查看層級(jí),發(fā)現(xiàn)鍵盤(pán)window有個(gè)子view UIInputSetHostView,這就是鍵盤(pán)顯示的父view,這時(shí)候取得這個(gè)view,也就取得了鍵盤(pán)的真正高度:
- (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橫屏彈鍵盤(pán)的高度錯(cuò)誤異常解決的文章就介紹到這了,更多相關(guān)iOS橫屏彈鍵盤(pán)高度內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
實(shí)例講解設(shè)計(jì)模式中的命令模式在iOS App開(kāi)發(fā)中的運(yùn)用
這篇文章主要介紹了設(shè)計(jì)模式中的命令模式在iOS App開(kāi)發(fā)中的運(yùn)用,文中還講到了Cocoa框架下使用的例子,實(shí)例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-03-03IOS UI學(xué)習(xí)教程之區(qū)分NSBundle和NSURL(讀取文件、寫(xiě)入文件)
這篇文章主要為大家詳細(xì)介紹了IOS UI學(xué)習(xí)教程之區(qū)分NSBundle和NSURL,如何讀取、寫(xiě)入文件,感興趣的小伙伴們可以參考一下2016-03-03iOS開(kāi)發(fā)創(chuàng)建frame實(shí)現(xiàn)window窗口view視圖示例
這篇文章主要為大家介紹了iOS開(kāi)發(fā)創(chuàng)建frame實(shí)現(xiàn)window窗口view視圖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05iOS小技能之字典轉(zhuǎn)模及對(duì)象相等性示例詳解
這篇文章主要為大家介紹了iOS小技能之字典轉(zhuǎn)模及對(duì)象相等性示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08教你如何解決XCODE升級(jí)后插件不能用問(wèn)題
Xcode 每次更新有個(gè)很頭疼的問(wèn)題,就是插件都會(huì)失效,要重裝。 不得不說(shuō)好多插件還是非常方便能提高效率。那么如何來(lái)解決這個(gè)問(wèn)題呢,今天我們就來(lái)探討下。2015-11-11右滑返回手勢(shì)和UIScrollView中手勢(shì)沖突的解決方法
這篇文章主要為大家詳細(xì)介紹了右滑返回手勢(shì)和UIScrollView中手勢(shì)沖突的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02IOS UI學(xué)習(xí)教程之使用UIImageView控件制作動(dòng)畫(huà)
這篇文章主要為大家詳細(xì)介紹了IOS UI學(xué)習(xí)教程之使用UIImageView控件制作動(dòng)畫(huà),感興趣的小伙伴們可以參考一下2016-03-03iOS 用Swipe手勢(shì)和動(dòng)畫(huà)實(shí)現(xiàn)循環(huán)播放圖片示例
本篇文章主要介紹了iOS 用Swipe手勢(shì)和動(dòng)畫(huà)實(shí)現(xiàn)循環(huán)播放圖片示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2017-03-03iOS動(dòng)畫(huà)案例(1) 類似于qq賬號(hào)信息里的一個(gè)動(dòng)畫(huà)效果
做一個(gè)類似于qq賬號(hào)信息里的一個(gè)動(dòng)畫(huà),感覺(jué)挺有意思,下面給大家分享iOS動(dòng)畫(huà)案例(1) 類似于qq賬號(hào)信息里的一個(gè)動(dòng)畫(huà)效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-01-01