Storyboard自動布局中遇到的問題
做項目時,需要一個頁面隱藏Nav,tableView從狀態(tài)欄頂部開始布局,可是自動布局過程中,tableView總是從statusBar下面開始布局(頂部總是覆蓋不了狀態(tài)欄)。后來我發(fā)現(xiàn)了問題,找到了解決方法。
先說一下我的解決方法
1.在storyboard中,選中viewController,在右側屬性欄找到“Adjust Scroll View Insets”選項,取消勾選此項。
2.為tableview布局添加約束時,點擊數(shù)值右側的向下箭頭,選擇“View(current distance = 0)”,不要選“Top Layout Guide(current distance = 0)”
關于Top Layout Guide和Bottom Layout Guide
原來自動布局時,是可以選擇你的約束是基于superview還是layout guide的。網(wǎng)上關于layout guide的描述如下:
Top Layout Guide用于自動布局的輔助,在Storyboard中可以看到Top Layout Guide作為ViewController的屬性存在,也就是topLayoutGuide,官方文檔對這個屬性的Discussion是:
topLayoutGuide屬性表示不希望被透明的狀態(tài)欄或導航欄遮擋的內容范圍的最高位置。這個屬性的值是它的length屬性的值(topLayoutGuide.length),這個值可能由當前的ViewController或這個ViewController所屬的NavigationController或TabBarController決定,有如下情況:
一個獨立的ViewController,不包含于任何其他的ViewController。如果狀態(tài)欄可見,topLayoutGuide表示狀態(tài)欄的底部,否則表示這個ViewController的上邊緣。
包含于其他ViewController的ViewController不對這個屬性起決定作用,而是由容器ViewController決定這個屬性的含義:
如果導航欄(Navigation Bar)可見,topLayoutGuide表示導航欄的底部。
如果狀態(tài)欄可見,topLayoutGuide表示狀態(tài)欄的底部。
如果都不可見,表示ViewController的上邊緣。
這部分還比較好理解,總之是屏幕上方任何遮擋內容的欄的最底部。