iOS橫屏彈鍵盤的高度錯(cuò)誤異常解決
問題:橫屏下第一次彈出鍵盤高度異常
- (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次彈出鍵盤時(shí),會(huì)走進(jìn)兩次通知,打印鍵盤高度:
keyboardFrame height: 125.000000 keyboardFrame height: 302.000000
這兩個(gè)高度都是錯(cuò)誤的,會(huì)導(dǎo)致鍵盤上面的工具條錯(cuò)位:

第2次彈出鍵盤時(shí):打印鍵盤高度為:
keyboardFrame height: 248.000000
這時(shí)候就是正常的高度了。
需要解決第一次異常的問題。
解決:直接取子view判斷

查看層級,發(fā)現(xiàn)鍵盤window有個(gè)子view UIInputSetHostView,這就是鍵盤顯示的父view,這時(shí)候取得這個(gè)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橫屏彈鍵盤的高度錯(cuò)誤異常解決的文章就介紹到這了,更多相關(guān)iOS橫屏彈鍵盤高度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Flutter?Widgets之標(biāo)簽類控件Chip詳解
這篇文章主要為大家介紹了Flutter?Widgets之標(biāo)簽類控件Chip詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
iOS各種ViewController控制器使用示例完整介紹
這篇文章主要為大家介紹了iOS各種ViewController控制器使用示例完整介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
iOS開發(fā)實(shí)現(xiàn)搜索框(UISearchController)
這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)實(shí)現(xiàn)搜索框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
iOS用UITextField切換明文/密文顯示時(shí)末尾空白的問題解決
最近在工作中遇到一個(gè)問題,利用UITextField切換明文/密文顯示時(shí)發(fā)現(xiàn)字符串后面會(huì)出現(xiàn)一段空白,所以下面這篇文章主要給大家介紹了iOS用UITextField切換明文/密文顯示時(shí)末尾空白問題的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05

