美文网首页iOS
Swift ios safearea的通用适配(不需判断是否为

Swift ios safearea的通用适配(不需判断是否为

作者: 小点草 | 来源:发表于2021-01-25 16:16 被阅读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,邮件会很快回,评论的话得看下次什么时候来简书了

    相关文章

      网友评论

        本文标题:Swift ios safearea的通用适配(不需判断是否为

        本文链接:https://www.haomeiwen.com/subject/qoxizktx.html