使用人员:iOS开发人员。
本文内容:iPhoneX之后,出现了安全区域的概念,安全区域外的屏幕部分放置可点击控件,会和系统手势有冲突。怎么适配呢?
最后附获取安全区域外顶部和底部高度的方法,以及iPhone各种机型尺寸(适配8.0以后)。
1.一般来说,如果这个界面只是一个UITableView,那么直接设置contentSize就行了,美观方便。
_tableView.contentInset = UIEdgeInsetsMake(0, 0, 15, 0);
2.如果不是tableview,并且底部有视图呢?比如下图界面:
以上述界面为例,就可以设置底部视图的约束为这样:
[self.view addSubview:self.bottomView];
[_bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(0);
make.height.mas_equalTo(50);
if (@available(iOS 11.0, *)) {
make.bottom.mas_equalTo(self.view.mas_safeAreaLayoutGuideBottom);
} else {
make.bottom.mas_equalTo(0);
}
}];
注意,如果上面有视图,也要跟着改哦,否则会挡住。
这么修改过后,效果如下图所示:
这么一来,底部操作项就不会被挡住了。但是可能会觉得有点不美观。可以加个视图填充下底部安全区外颜色,我是这么写的:
if (@available(iOS 11.0, *)) {
__block CGFloat bottomPadding = UIApplication.sharedApplication.keyWindow.safeAreaInsets.bottom;
UIView *bottomView = [UIView new];
bottomView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:bottomView];
[bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.bottom.right.mas_equalTo(0);
make.height.mas_equalTo(bottomPadding);
}];
}
效果如下图所示:
完成!
有其他方式,欢迎留言_
Tips:
1.iOS如何获取安全区域外顶部和底部的高度?
OC:
if (@available(iOS 11.0, *)) {
UIWindow *window = UIApplication.sharedApplication.keyWindow;
CGFloat topHeight = window.safeAreaInsets.top;
CGFloat bottomHeight = window.safeAreaInsets.bottom;
}
Swift:
if #available(iOS 11.0, *) {
let window = UIApplication.shared.keyWindow
let topHeight = window?.safeAreaInsets.top
let bottomHeight = window?.safeAreaInsets.bottom
}
2.iPhone尺寸(2018年)
iPhone5 == iPhone5s == iPhone5c : 320 x 568
iPhone8 == iPhone7 == iPhone6s == iPhone6 : 375 x 667
iPhone8plus == iPhone7plus == iPhone6s plus == iPhone6plus : 414 x 736
iPhoneX == iPhoneXS : 375 x 812
iPhoneXS Max == iPhoneXR : 414 x 896
网友评论