iOS11和iPhone X适配(这里有一大坑)

首先说一下iOS11系统:

@available(iOS11.0, *)可进行系统版本判断。

1.tableView的self-sizing,关闭自适应行高、分区头高、分区尾高:

【注意这里有一个巨大的坑,MB调了一下午才发现这个问题 

【iOS11的tableView默认开启self-sizing,这个东西不仅仅是自适应行高、分区头(尾),还影响contentOffset以及contentSize,如果所有的cell没有被完全展示过一次,那么这两个属性的值是会莫名其妙发生变化的。所以在牵涉到使用这两个属性做计算的时候特别注意了,最好就是关闭self-sizing功能.

self.tableView.estimatedRowHeight = 0;

self.tableView.estimatedSectionHeaderHeight = 0;

self.tableView.estimatedSectionFooterHeight = 0;


2.处理.heic格式(Live Photo)的原图发送:

imageData = UIImageJPEGRePresentation([UIImage imageWithData: imageData], 0.83);//0.83保证压缩前后图片大小一致


3.MJRefresh刷新控件错位:

在AppDelegate.m中添加一行代码:

if (@available(iOS11.0, *)){

[[UIScrollViewappearance]setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];

}


4.打开系统相册,UIImagePickerController内容被导航栏覆盖:


在present视图前设置

if (@available(iOS11.0, *)){

[[UIScrollViewappearance]setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentAutomatic];

}

然后在dismiss视图后恢复设置

if (@available(iOS11.0, *)){

[[UIScrollViewappearance]setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];

}





然后是iPhone X的适配

#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)


1.应用启动出现上下有黑边:

增加一张尺寸为 1125x2436 的启动图,iPhone X屏幕尺寸为 375x812,使用的是3倍图


2.应用打包提交版本:

AppIcon增加一张尺寸为 1024x1024的icon


3.iPhone X由于小刘海状态栏高度发生变化,由20pt增加到44pt:

所有有关导航栏高度为64pt(或者状态栏20pt)的frame计算时,都应该判断当前设配为iPhone X的时候,相应增加24pt


4.iPhone X底部tabbar的高度也发生了变化,由原来的49pt增加到了83pt,增加了34pt










猜你喜欢

转载自blog.csdn.net/NB_Token/article/details/78643673