本文由 送你的独白么 原创,转载请注明出处!git
普大喜奔,苹果爸爸在9.20号发布了新的iOS 11系统和iPhone手机,做为iOS 开发者,第一件事是什么,固然是买iPhoneX啦------我这个穷逼并不能买得起。因此个人第一件事,就是开始适配啦。github
我开始兴致勃勃的适配iOS 11,因为项目里有使用到XIB,因此我就先对XIB的界面进行适配,按照网上的教程, 先在XIB里对Safe Area选项打钩,而后把距离SuperView约束所有改成距离Safe Area的约束,大功告成。它看起来是下面这样的:测试
XIB添加约束以后的图.pngspa
而后command + R运行,iPhone X上完美,界面是这样的:code
iPhoneX-iOS11-XIB.png教程
这个时候我又运行了一下在iOS 9上的效果,咦,个人view怎么被挡住了,它看起来是这样的:开发
iPhone6s-iOS9-XIB.pngget
这时,我方了,我想到了,有多是iOS9或者10不支持Safe Area,因而,我开始测试,我在Storyboard中设置一样的约束,完成后的界面是这样的:it
Storyboard添加约束以后的图.png搜索
而后再次command + R,我靠,什么状况,在iOS 9上竟然是OK的???WTF!!界面看起来是这样的:
iPhone6s-iOS9-Storyboard.png
这时,知道了,原来并非iOS9或者10不支持Safe Area。因而,我开始寻找XIB和Storyboard的区别,找了一天,最终仍是没找到区别在哪里,我想,这有多是苹果的BUG吧,这时摆在我面前有3个解决方案
1.设置导航条为不透明,这样,就默认从导航条下方开始计算了。 2.把项目里全部的XIB所有换成Storyboard。 3.在代码里作判断,而后设置
这三个所有是能够解决这个问题的,但是这三个都不是我想要的结果,有没有能够直接在XIB里面设置约束的方法呢?通过多方的搜索,最终被我实现了
1.多添加一个距离SuperView的约束 2.设置这个约束为>=距离 3.设置距离Safe Area的约束优先级比距离SuperView约束优先级低。(好比750)
设置好以后,界面看起来是这个样子的
12333321441.gif
至此,大功告成,运行起来完美。
Demo地址: https://github.com/xiaoyao20084321/Safe-Area-XIBBUG
有什么疑问,随时请问,也能够在评论里一块儿探讨。
做者:送你的独白么 连接:https://www.jianshu.com/p/ba9bb519f07f 來源:简书 简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。