當我們在使用navigationController的時候,執行nav的push和pop過程中,有時候會涉及到nav的顏色問題,不經意間就會出現navigationBar消失了,展示一條黑色背景或者白色背景,這無疑非常難看,這多半是translucent的問題,那下面我們就探究一下關于translucent屬性。
我們從種情況來分析:非滾動視圖和滾動視圖。
在iOS7以后,默認為YES。{控件從(0,0)點開始,設置為NO,則從nav底部(0,64)開始};
1、我們模擬情景,放置一個寬為屏幕寬度,高度為200的綠色的button,設置相對控制器view的坐標為(0,0);
此時采用默認值:iOS7以后,translucent為YES,看看效果:
2、此時再將translucent更改為NO,再看看效果
我們發現,button并沒有被navigationBar遮擋!??!,再看界面層次結構:
顯而易見,translucent為默認值YES時,綠色button從屏幕左上角(0,0)開始。translucent設為NO以后,綠色button從(0,64)開始。
也就得出,translucent為YES,控制器view從(0,0)開始;translucent為NO,控制器view從(0,64)開始。
· 我們都知道滾動視圖中有一個屬性是contentOffset,設置內容偏移量,從這個角度,分析一下translucent屬性對滾動視圖有什么影響:
· 從iOS7以后,由于translucent值為YES,坐標從(0,64)開始,但這是對于非滾動視圖來說的。接下來,我們按照分析非滾動視圖的順序,來模擬一個場景,nav嵌套一個tableView,tableView的背景色是紅色,坐標(0,0),寬高與控制器view等寬等高。
1、我們先使用translucent默認是YES,來看看情況。
我們發現,雖然tableView的坐標點還是(0,0),但是內容偏移了64,紅色背景已經透出來了。這就是translucent為默認值YES時,加載滾視圖的特性!
(PS:如果我們不想讓內容偏移,就任性的讓內容被navigationBar遮蓋,有兩個方案:
1、此時有一個滾動視圖特有的屬性,automaticallyAdjustsScrollViewInsets,默認為YES,滾動視圖會默認進行調整,如果這設置為NO,不進行自動調整,就是下面這個效果,cell被遮擋住
2、設置self.edgesForExtendedLayout=UIRectEdgeNone;,控制器的view也變成了從(0,64)開始,而不是上面條件1的(0,0)點。本人測試,這樣做nav會變得略黑色,目測背面window的顏色)
2、再模擬一個,我們將translucent設置為NO,再來看看效果:
我們發現,第一:cell依然沒有被遮擋,但是tableView所在控制器view的坐標已經不再是(0,0)了,而是(0,64)。第二:nav的透明沒有了,變為了純白色。這就是translucent的特性。這樣如果我們增加了側滑手勢的話,就會導致上面的navigationBar消失,顯示后面的黑色背景。這顯然不是我們想要的。
當我們使用滾動視圖的時候,,比如tableVIew,scrollview時候,建議不要修改translucent屬性,就是用系統默認的YES。
新聞熱點
疑難解答