iOS 11系统 iPhone X之前设备适配小节

一、之前项目运行在新系统上存在的问题

因为我项目中的导航栏都是自定义的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'

你可能感兴趣的:(iOS 11系统 iPhone X之前设备适配小节)