老项目中发现 IQKeyboardManager
在某些时候会出现弹出 顶部导航栏 frame
崩溃的问题 调试发现及时修改的
frame
是计算正常的 但是不知道是不是系统问题 navigationBar
的显示会异常 只留下status
白条下方空白一块
这个可能跟项目的视图结构有关系 rootvc -> tabbarvc -> navigationvc
IQKeyboardManager
弹出的时候直接是setFrame
的 tabbarvc
的view
解决方法: 找到 IQKeyboardManager 框架中IQUIView+Hierarchy.m 文件,修改 -(UIViewController *)topMostController
方法中的代码代码如下。
- (UIViewController *)topMostController
{
UIViewController *rootController = [UIApplication sharedApplication].keyWindow.rootViewController;
if ([rootController isKindOfClass:[UITabBarController class]]) {
UITabBarController *tabBarController = (UITabBarController *)rootController;
UINavigationController *navController = tabBarController.selectedViewController;
UIViewController *viewController = (UIViewController *)navController.visibleViewController;
while (viewController.presentedViewController) {
viewController = (UIViewController *)viewController.presentedViewController;
}
return viewController;
} else if ([rootController isKindOfClass:[UINavigationController class]]) {
UINavigationController *navController = (UINavigationController *)rootController;
return navController.visibleViewController;
} else if ([rootController isKindOfClass:[UIViewController class]]) {
return rootController;
} else {
return nil;
}
}