iOS

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的实际高度
        }
        
    }
}

刘海屏效果图 效果图

效果如图,可以看到,刘海也覆盖到了,而不用加判断:
是否刘海屏 ?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)
        }
刘海屏效果图 效果图

这样的适配当然不止是自定义导航栏,几乎用到safearea的地方都可以做类似的适配。

下面是和原生导航栏的对比图,貌似他们应该也是这样做约束的:


自定义 原生

好了,这次的分享就这样,有问题可以评论留言,或者发邮件289193866@qq.com,邮件会很快回,评论的话得看下次什么时候来简书了

上一篇下一篇

猜你喜欢

热点阅读