之前停了一段时间iOS,去做小程序。今天又继续开发iOS。今天做的事情主要是适配iPhoneX,因为后面提交的版本必须适配iPhone X,否则不让上架。
粗看项目,我大概发现了几点需要适配的地方:
- tableView的头视图和尾视图高度错误
- tableView向下偏移了一定距离
- tabBar高度不对
- 导航条和状态栏高度不对,导航条上的视图位置不对。
- 视图中没有导航条的时候,顶部视图的位置不对。
下面一一解决上述问题
- 解决这个问题前,先看一下:
通过英文可以知道,设置为0可以关闭自动估算高度。所以:self.estimatedSectionHeaderHeight = 0; self.estimatedSectionFooterHeight = 0;通过这两行代码关闭头视图和尾视图的自动估算行高。PS:如果不需要头视图和位示图的高度,代理方法heightForHeaderInSection以及heightForFooterInSection 不能返回0,可以返回0.1。
- 不止tableView会向下偏移,所以继承自scrollView及其子类的都会向下偏移。因为UIView及其子类都遵循UIAppearance协议,所以我们可以进行全局配置:
if (@available(iOS 11.0, *)){
[[UIScrollViewappearance] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}
iPhone X的tabBar高度为83,可以通过宏定义的方式适配iPhone X:
#define TabBar_HEIGHT (IPHONEX?83:49)
iPhone X的状态栏高度为44,比之前多了24,原因你懂的。也是可以通过设置宏定义的方式:
#define STATUS_BAR_H (IPHONEX?44:20)
出现问题的原因还是因为状态栏高度变为44导致顶部条的高度增加,所以要把顶部视图的top约束增加24.
PS:我这样的解决方案,基础是约束搭建得当,而且宏定义使用得当。约束搭建得当指的是,顶部视图我只要适配top约束,下面都会适配好。宏定义使用得当,指的是给view设置约束的时候使用宏定义,不直接用数值。这样适配X的时候只要把宏定义改改就好。
我的这套方案只是适合自己的项目,如果发现其他问题我这没有指出的,可以再google。适配iPhone X挺简单的。