關於iOS的autolayout中導航欄的疑問


在storyBoard中,如果使用editor>embed>navigation controller 就可以給一個Controller添加一個導航欄控制器

這時候拖一個view上去,給這個view添加約束的時候,就會有top layout guide這個選項,這樣在橫屏,豎屏情況下,view都會緊貼導航欄顯示

但是在新創建一個file的時候,一起創建出來的xib卻沒有這種選項,要想讓view緊貼導航欄顯示,必須要將頂部約束成64,但是在橫屏狀態下就會在導航欄和view中間出現白條,因為橫屏狀態下狀態欄會消失,導航欄會的hight會變小

 

我曾經嘗試使用sizeClass來解決這個問題,在4,5,6 ,6P, 6s上沒有問題,但是在6sP上,導航欄在橫屏的時候hight沒有變,瞬間想吐血

 

然后我想到了一個比較復雜的解決辦法:

利用automaticallyAdjustsScrollViewInsets這個屬性來自適應導航欄,具體做法是

先在xib上拖一個scrollView,然后將上下左右約束全都設置為0

然后再拖一個view到scrollView上,四個約束也全部是0,這時候會出現約束報紅,先不管,繼續對view添加約束

先添加一個水平約束

再添加一個height約束

這時候就發現約束報錯消失,這樣約束之后,scrollview的contentSize的寬就是屏幕的寬度,高是我們對view的height約束

當我們在viewWillAppear方法中添加self.automaticallyAdjustsScrollViewInsets = YES;

這樣導航條的位置就會自動被空出來,我們的控件在view上進行約束就可以實現緊貼導航條的效果

 

最后的重點

雖然這個方法可以解決問題,但是很麻煩,添加的圖層也很多,不知道有沒有直接設置xib就可以解決的簡單方法

哪位大神知道幫幫啊

在下願意用一顆蘋果來換!!!

 

answer:

在代碼中添加

self.edgesForExtendedLayout = UIRectEdgeNone;

就可以實現以導航條為起點高度來進行控件的約束,這個約束到底是什么意思還不是很清楚,以后再來補充

謝謝ashamp大俠的幫助!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM