/*
屏幕适配
非全屏
分iOS 11以上及iOS 11 以下
在iOS 11及以上
self.topLayoutGuide.snp.top 还有.bottom
self.topLayoutGuide.snp.bottom 还有 .top
这种适配就改成了
self.view.safeAreaLayoutGuide.snp.top
self.view.safeAreaLayoutGuide.snp.bottom
iOS 11以下
用
self.topLayoutGuide.snp.top
self.topLayoutGuide.snp.bottom
如果用top,那么在偏移量为0的情况下在屏幕的最上方
如果用bottom,那么在偏移量为0的情况下在屏幕的状态栏(20的高度)的下面
self.bottomLayoutGuide.snp.top
self.bottomLayoutGuide.snp.bottom
二者没有什么区别
iOS 11以上
self.view.safeAreaLayoutGuide.snp.top
在偏移量为0的情况下在屏幕的状态栏下,如果需要顶到屏幕最上方需要设置偏移量为 -20
self.view.safeAreaLayoutGuide.snp.bottom
在偏移量为0的情况下在屏幕的最底部
全屏
系统都在iOS 11以上(偏移量 在当前位置向上偏移为负值,向下偏移为值)
self.view.safeAreaLayoutGuide.snp.top
在偏移量为0的情况下在屏幕的状态栏下,如果需要顶到屏幕最上方需要设置偏移量为 -44
self.view.safeAreaLayoutGuide.snp.bottom
在偏移量为0的情况下在屏幕下方安全区域上方,如果需要顶到屏幕最下方需要设备偏移量为 34
*/
创建4个不同背景颜色的view,添加到控制器
greenView.snp.makeConstraints { (make) in
make.left.equalToSuperview().offset(0)
make.width.equalToSuperview().dividedBy(4)
if isFullScreen { // 判断是否是全面屏
if #available(iOS 11, *) {
make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(-44)
make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom).offset(34)
} else { // 其实下面应该不走 好像全面屏系统都是iOS11 以上了,但是系统不知道 还是要做一下适配
make.top.equalTo(self.topLayoutGuide.snp.top).offset(0)
make.bottom.equalTo(self.bottomLayoutGuide.snp.bottom).offset(0)
}
} else {
if #available(iOS 11, *) {
make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(-44)
make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom).offset(34)
} else {
make.top.equalTo(self.topLayoutGuide.snp.top).offset(0)
make.bottom.equalTo(self.bottomLayoutGuide.snp.bottom).offset(0)
}
}
}
redView.snp.makeConstraints { (make) in
make.left.equalTo(greenView.snp.right).offset(0)
make.width.equalToSuperview().dividedBy(4)
if isFullScreen {
if #available(iOS 11, *) {
make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(0)
make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom).offset(0)
} else { // 其实下面应该不走 好像全面屏系统都是iOS11 以上了,但是系统不知道 还是要做一下适配
make.top.equalTo(self.topLayoutGuide.snp.top).offset(0)
make.bottom.equalTo(self.bottomLayoutGuide.snp.bottom).offset(0)
}
} else {
if #available(iOS 11, *) {
make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top)
make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom)
} else {
make.top.equalTo(self.topLayoutGuide.snp.top).offset(10)
make.bottom.equalTo(self.bottomLayoutGuide.snp.bottom).offset(-10)
}
}
}
orangeView.snp.makeConstraints { (make) in
make.left.equalTo(redView.snp.right).offset(0)
make.width.equalToSuperview().dividedBy(4)
if isFullScreen {
if #available(iOS 11, *) {
make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(-44)
make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom).offset(0)
} else { // 其实下面应该不走 好像全面屏系统都是iOS11 以上了,但是系统不知道 还是要做一下适配
make.top.equalTo(self.topLayoutGuide.snp.top).offset(0)
make.bottom.equalTo(self.bottomLayoutGuide.snp.bottom).offset(0)
}
} else {
if #available(iOS 11, *) {
make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(0)
make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom).offset(0)
} else {
make.top.equalTo(self.topLayoutGuide.snp.bottom).offset(0)
make.bottom.equalTo(self.bottomLayoutGuide.snp.top).offset(-10)
}
}
}
yellowView.snp.makeConstraints { (make) in
make.left.equalTo(orangeView.snp.right).offset(0)
make.width.equalToSuperview().dividedBy(4)
if isFullScreen {
if #available(iOS 11, *) {
make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(0)
make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom).offset(34)
} else { // 其实下面应该不走 好像全面屏系统都是iOS11 以上了,但是系统不知道 还是要做一下适配
make.top.equalTo(self.topLayoutGuide.snp.top).offset(0)
make.bottom.equalTo(self.bottomLayoutGuide.snp.bottom).offset(0)
}
} else {
if #available(iOS 11, *) {
make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(-20)
make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom).offset(-10)
} else {
make.top.equalTo(self.topLayoutGuide.snp.bottom).offset(30)
make.bottom.equalTo(self.bottomLayoutGuide.snp.bottom).offset(0)
}
}
}
全屏适配效果
图片.png