iOS XIB使用Safe Area後在iOS9和10上面出現的問題和解決方案

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

相關文章
相關標籤/搜索