1. 程式人生 > >iOS XIB使用Safe Area後在iOS9和10上面出現的問題和解決方案

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

本文由 送你的獨白麼 原創,轉載請註明出處!

導語

普大喜奔,蘋果爸爸在9.20號釋出了新的iOS 11系統和iPhone手機,作為iOS 開發者,第一件事是什麼,當然是買iPhoneX啦------我這個窮逼併不能買得起。所以我的第一件事,就是開始適配啦。

開始適配

我開始興致勃勃的適配iOS 11,由於專案裡有使用到XIB,所以我就先對XIB的介面進行適配,按照網上的教程, 先在XIB裡對Safe Area選項打鉤,然後把距離SuperView約束全部改為距離Safe Area的約束,大功告成。它看起來是下面這樣的:

XIB新增約束之後的圖.png

 

然後command + R執行,iPhone X上完美,介面是這樣的:

iPhoneX-iOS11-XIB.png

 

這個時候我又運行了一下在iOS 9上的效果,咦,我的view怎麼被擋住了,它看起來是這樣的:

iPhone6s-iOS9-XIB.png

 

這時,我方了,我想到了,有可能是iOS9或者10不支援Safe Area,於是,我開始測試,我在Storyboard中設定同樣的約束,完成後的介面是這樣的:

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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。