借鉴于作者:http://www.jianshu.com/p/3a9ad4f0fa32?appinstall=0
>使用:
在你的pch中,宏定义宽高,和高度系数、宽度系数(这里会有人觉得,宽度系数?是的,经历了iphoneX以后,我们都该有所觉悟,如果哪天苹果的屏幕宽度发生了变化,我们也要去一点点地修改项目中的 宽度 吗?)、到顶部和底部的安全距离。
- 1.
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
配合美工标注图使用:
高度系数:(821x 667 8和6)
#define HeightCoefficient (SCREEN_HEIGHT == 812.0 ? 667.0/667.0 : SCREEN_HEIGHT/667.0)
宽度系数:(821x 667 8和6)
#define WidthCoefficient (SCREEN_WIDTH == 375.0 ? 375.0/375.0 : SCREEN_WIDTH/375.0)
- 2.安全距离
顶部高度
#define SafeAreaTopHeight (SCREEN_HEIGHT == 812.0 ? 88 : 64)
底部高度(底部高度适配:列表类不减安全距离,底部有按钮的减)
#define SafeAreaBottomHeight (SCREEN_HEIGHT == 812.0 ? 34 : 0)
例:
有两种情况,到目前倒是没具体标准,但是根据苹果自己的样式,有列表的页面,下边的安全距离不会减去,底部有按钮的页面底部安全距离减去。(注意底部安全距离部分是有手势的。如果公司没有测试机,可以去附近体验店,先玩玩,了解下吧。😁)
不减底部安全距离:
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, SafeAreaTopHeight, SCREEN_WIDTH, SCREEN_HEIGHT - SafeAreaTopHeight) style:UITableViewStylePlain];
减去底部安全距离:
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, SafeAreaTopHeight, SCREEN_WIDTH, SCREEN_HEIGHT - SafeAreaTopHeight - SafeAreaBottomHeight) style:UITableViewStylePlain];
- 3. ios11下 controller.automaticallyAdjustsScrollViewInsets = NO无效问题:
//如果导航隐藏 ios11 下方法controller.automaticallyAdjustsScrollViewInsets = NO; 无效的处理:
在pch中,宏定义下面方法;
/// 第一个参数是当下的控制器适配iOS11 一下的,第二个参数表示scrollview或子类
#define AdjustsScrollViewInsetNever(controller,view) if(@available(iOS 11.0, *)) {view.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;} else if([controller isKindOfClass:[UIViewController class]]) {controller.automaticallyAdjustsScrollViewInsets = NO;}
例:
在需要使用的控制器中,AdjustsScrollViewInsetNever(self, _tableView);
- 4.cell的高度自计算问题:
//cell删除方法据说有添加新的方法没试过
//cell分组 组头/组尾部高度问题(我的项目实测,没发现高度有问题),如果你的有问题,可以进行如下尝试:
/// 自动关闭估算高度
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;