關於UINavigationBar和UITabBar的translucent屬性的問題

weixin_33866037發表於2018-12-11

UINavigationBar的translucent屬性是設定導航欄的透明度的,translucent屬性預設是YES,也就是具有透明屬性。所以我們看到的導航欄背景色與美工給的會有很明顯的色差。
取消透明度:

[[UINavigationBar appearance] setTranslucent:NO];
self.navigationController.navigationBar.translucent = NO;

這兩種設定都可以,一種是全域性的,一種是當你只需要在某個Controller上處理。

設定translucent屬性不同值的時候,還會改變Controller的self.view計算遠點的位置
當translucent = YES,controller中self.view的原點是從導航欄左上角開始計算
當translucent = NO,controller中self.view的原點是從導航欄左下角開始計算

如果將屬性translucent設定為YES的時候,Controller中改變self.view計算原點位置還有以下幾種方法:

self.edgesForExtendedLayout = UIRectEdgeNone;       //從navigationBar下面開始計算一直到螢幕tabBar上部
self.edgesForExtendedLayout = UIRectEdgeAll;        //從螢幕邊緣計算(預設)
self.edgesForExtendedLayout = UIRectEdgeTop;        //navigationBar下面開始計算一直到螢幕tabBar上部
self.edgesForExtendedLayout = UIRectEdgeBottom;     //從navigationBar下面開始計算一直到螢幕底部

在translucent = NO的時候,我試驗設定self.edgesForExtendedLayout = UIRectEdgeAll;但是是沒有效果的。如果你不想設定背景圖,又需要self.view從navgationBar左上角為原點,就只能在對應的Controller:
self.navigationController.navigationBar.translucent = YES;
設定這個屬性,然後在viewWillDisappear方法中設定回NO,這樣就不會影響外面的Controller。

UITabBar的translucent屬性是設定標籤欄的透明度的,在Push控制器以後,點選返回鍵回來或者滑動返回,底部tabbar出現了錯位的情況,解決:

在tabbarcontroller或者AppDelegate裡 設定 [[UITabBar appearance] setTranslucent:NO];
系統預設UITabBar的translucent屬性為YES,當設定為translucent屬性為YES時,tabbar就會覆蓋viewControllers下面的部分,當設定為translucent屬性為NO時,tabbar便不會覆蓋viewControllers下面的部分

相關文章