Swift ios safearea的通用适配(不需判断是否为
2021-01-25 本文已影响0人
小点草
2021年了,现在才写这个,太迟了点,但还是有很多人用的是iphone8及以下的手机,而且还有很多ioser对刘海屏的适配太过繁琐了点,所以在空闲时间写了这个来方便大家,不废话,上代码
下面用到了第三方库SnapKit
class TextViewController : UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.isHidden = true
let navView = UIView()
view.addSubview(navView)
view.backgroundColor = .white
navView.backgroundColor = .red
navView.snp.makeConstraints{
$0.leading.trailing.equalToSuperview()
$0.top.equalToSuperview()
$0.bottom.equalTo(view.safeAreaLayoutGuide.snp.top).offset(60) //view的实际高度
}
}
}
![](https://img.haomeiwen.com/i4092192/cd986e1486053903.png)
![](https://img.haomeiwen.com/i4092192/57101660f774726d.png)
效果如图,可以看到,刘海也覆盖到了,而不用加判断:
是否刘海屏 ?44 : 0
更进一步可以增加一个baseView来放置控件,如返回按钮等,当然可以不加,我一般都会加,因为这样更好做约束:
let base = UIView()
navView.addSubview(base)
base.backgroundColor = .yellow
base.snp.makeConstraints{
$0.top.equalTo(navView.safeAreaLayoutGuide)
$0.leading.trailing.bottom.equalToSuperview()
}
let button = UIButton()
button.backgroundColor = .blue
base.addSubview(button)
button.snp.makeConstraints{
$0.leading.equalTo(20)
$0.centerY.equalToSuperview()
$0.size.equalTo(50)
}
![](https://img.haomeiwen.com/i4092192/3edf2f6fa54c8f74.png)
![](https://img.haomeiwen.com/i4092192/4dcb7cbd427bfd97.png)
这样的适配当然不止是自定义导航栏,几乎用到safearea的地方都可以做类似的适配。
下面是和原生导航栏的对比图,貌似他们应该也是这样做约束的:
![](https://img.haomeiwen.com/i4092192/67dbd8bfcf979d04.png)
![](https://img.haomeiwen.com/i4092192/bcd891dfcfd4d9a7.png)
好了,这次的分享就这样,有问题可以评论留言,或者发邮件289193866@qq.com,邮件会很快回,评论的话得看下次什么时候来简书了