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
這兩個高度都是錯誤的,會導致鍵盤上面的工具條錯位:

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

