iOS設(shè)置translucent引發(fā)的導(dǎo)航欄色差和坐標(biāo)問題

最近開發(fā)項目,在對導(dǎo)航欄barTintColor進(jìn)行設(shè)置時。發(fā)現(xiàn)渲染出來的顏色和美工給的效果圖會出現(xiàn)偏差,去找了一些資料。發(fā)現(xiàn)在iOS7系統(tǒng)以上導(dǎo)航欄多了一個translucent屬性。這個屬性就是設(shè)置導(dǎo)航欄是否具有透明度這個功能。

translucent屬性默認(rèn)是YES,也就是具有透明屬性。所以我們看到的導(dǎo)航欄背景色與美工給的會有很明顯的色差。

有兩種解決方案:
1、取消透明度:

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

這兩種設(shè)置都可以,一種是全局的,一種是當(dāng)你只需要在某個Controller上處理。

2、設(shè)置背景圖片

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbg-ios7"] forBarMetrics:UIBarMetricsDefault];  // 設(shè)置這個會導(dǎo)致搜索框動畫抖動

當(dāng)translucent = YES,controller中self.view的原點是從導(dǎo)航欄左上角開始計算
當(dāng)translucent = NO,controller中self.view的原點是從導(dǎo)航欄左下角開始計算

在translucent = YES的時候,Controller中改變self.view計算原點位置:

self.edgesForExtendedLayout = UIRectEdgeNone;       //從navigationBar下面開始計算一直到屏幕tabBar上部
self.edgesForExtendedLayout = UIRectEdgeAll;        //從屏幕邊緣計算(默認(rèn))
self.edgesForExtendedLayout = UIRectEdgeTop;        //navigationBar下面開始計算一直到屏幕tabBar上部
self.edgesForExtendedLayout = UIRectEdgeBottom;     //從navigationBar下面開始計算一直到屏幕底部

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

關(guān)于用圖片設(shè)置會導(dǎo)致搜索框抖動的問題,具體我還沒有很好的解決辦法。而且我只是在iOS8系統(tǒng)下會出現(xiàn)抖動。當(dāng)然可以再對應(yīng)Controller上設(shè)置下translucent屬性,但是我沒有實驗過。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容