一、之前项目运行在新系统上存在的问题
因为我项目中的导航栏都是自定义的View,所以不存在导航栏适配问题,以下是一些界面适配的问题
1. tableview的顶部在状态栏的底下的页面都出现了顶部状态栏位置空白
2. tableview有刷新的页面都出现了刷新时闪一下
3. tableview的sectionheader变得高度高了
4. 使用IQKeyboardManager时键盘上的完成按钮“不见了”
二、出现问题的原因及解决方法
1. 状态栏位置空白出现原因是:tableview的contentInsets顶部被系统设置了20,与iOS11的safeArea有关,所有scrollView顶部如果在状态栏下面其顶部都会有20contentInsets。解决方法
if(@available(iOS11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior=UIScrollViewContentInsetAdjustmentNever;
}
2. 刷新的时候闪一下的原因是,iOS 11系统将tableview改为自动计算高度了,即rowheight = UITableViewAutomaticDimension了.这样的情况下需要tableview设置estimateRowheight。
3.tableview的sectionheader\sectionfooter高度不符合代码设定的高度的原因: tableview的viewForHeaderInSection现在是需要设置的,在UITableViewStylePlain样式下如果没设置,在即使设置了高度也不会显示sectionheader,同时,也需要实现heightForHeaderInSection方法;在UITableViewStyleGrouped样式下,需要设置以下代码,高度才会符合设定的高度
- (UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section{
return nil;
}
4. 使用IQKeyboardManager时键盘上的完成按钮“不见了”的原因:IQKeyboardManager内部使用的IQBarButtonItem类继承UIBarButtonItem,UIBarButtonItem继承了UIBarItem,iOS 11对其做了修改。改正这个的bug的方法
pod'IQKeyboardManager','~> 4.0.13'