本文由 送你的獨白麼 原創,轉載請註明出處!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 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。