美文网首页
简单使用safeAre适配UI

简单使用safeAre适配UI

作者: xiaoliang1 | 来源:发表于2017-09-27 10:56 被阅读266次

    ios11更新了。之前xcode9的bate版我也没时间看,知道今天要适配才发现问题来了。下午研究半天。感觉这玩意就是苹果给我们造的坑。我们来填。
    图解safeAre:

    WX20170927-034057@2x.png WX20170927-034500@2x.png

    除了iPhone x,之前我们要展现在视野里面的一般都是从状态栏以下开始。

    self.view.safeAreaInsets 这个属性是只读属性。这个属性一开始不会改变的。所以在- (void)viewDidLoad里面去判断安全区域是不行的。这样做出的UI无法适配所有屏幕。
    真正改变是在apple给的 新的方法里面;

    - (void)viewSafeAreaInsetsDidChange;
    

    这个方法会被系统自动。
    也是有更改安全区域的方法。也就是

    @property(nonatomic) UIEdgeInsets additionalSafeAreaInsets;
    

    这个属性在Viewcontroller,UIView上并没有发现能更改的方法,更改后平不会立马生效,也是在系统调用viewSafeAreaInsetsDidChange时生效。
    在viewSafeAreaInsetsDidChange内判断self.view.safeAreaInsets才是有值的。所以你的view 此方法里面写真确的frame 才行。
    我们大可重写viewSafeAreaInsetsDidChange方法。ios11以下只会相当于一个没人调用的方法。所以我们可以的放心重写此方法。

    废话不多说,我写了一个demo,面有几种适配UI的情况去。大家可以参考参考。
    对于tableview 偏移的问题。我写了两个方案。也在demo里面。
    self.view的背景色:蓝色
    btn的背景色:土黄色
    tableView的背景色:黄色
    看有没有适配成功就用xcode自带的工具看图层就可以。
    我该更frame 的方法可以抽出一个方法来更改View偏移量。没必要 viewDidLoad和viewSafeAreaInsetsDidChange都写一遍。
    建议适配使用“frame + autolayout”混合使用来适配UI更快些。
    demo下载地址:https://pan.baidu.com/s/1hrMBwKc
    如果这篇文章文章对你有帮助,可以赞赏支持下。那题怕点个赞也行。谢谢!

    相关文章

      网友评论

          本文标题:简单使用safeAre适配UI

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