天天看點

iOS6 / iOS7 狀态欄高度适配

問題原因:iOS7的狀态欄(status bar)不再占用單獨的20px,是以假設你在iOS6上的界面布局是正常的,那麼到了iOS7上就會變成以下這個樣子:

iOS6 / iOS7 狀态欄高度适配
iOS6 / iOS7 狀态欄高度适配

左邊是iOS6界面布局,右邊是iOS7界面布局。這時有人會想着把iOS7界面上控件總體向下移動20px,可是當Interface Builder Document改成Xcode 4.6時又變成了例如以下情況:

iOS6 / iOS7 狀态欄高度适配
iOS6 / iOS7 狀态欄高度适配

界面不會由于你在不同的Interface Builder Document值下設定不同的布局而不同,是以必須用Xcode 5的iOS 6 / 7 Deltas機制解決。

如果你之前基于的是iOS6開發的應用,此時布局是正确的,移步到控件的size inspector頁面對iOS 6 / 7 Deltas屬性進行設定。

由于我們做的是高度适配,是以我們用到△Y和△Height兩個值,我們如今是基于iOS6去适配iOS7,是以6上正确了,7的布局就會跟狀态欄重疊,故View和TableView的△Y值都應該設定為20,即6上布局在7上顯示時,Y坐标下移20px,這樣就不會與狀态欄重疊了。可是總體下移了20px,TableView底部20px的區域将無法顯示,是以這時候要單獨設定TableView的△Height為-20,即在7上顯示時,TableView的高度要減小20px,以使TableView所有顯示在螢幕内。此時将Interface Builder Document改為Xcode 5發現,界面顯示正常,檢視各控件的iOS 6 / 7 Deltas值,發現其與在Xcode 4.6下設定的值正好相反,即假設基于iOS7布局去改動iOS6的布局,那麼應該将△Y設定為負值,即讓控件在iOS6上顯示時向上移動對應的高度。

iOS6 / iOS7 狀态欄高度适配

終于的效果:

iOS6 / iOS7 狀态欄高度适配
iOS6 / iOS7 狀态欄高度适配