IOS 實現自定義的導航欄背景以及自定義顏色的狀態欄(支持7.0以及低版本)


為尊重文章原作者,轉載務必注明原文地址:http://www.cnblogs.com/wt616/p/3784717.html

先看效果圖:

 

在自定義導航欄背景時,可能會遇到以下一些問題:

1、當設置導航欄背景后,狀態欄的顏色也會跟着一起改變掉,這可能不是你說希望看到的

2、IOS7以上的版本和低版本顯示出來的導航欄高度位置有差別,這個差別就是狀態欄的高度20,為了兼容低版本,必須統一

 

解決思路:

1、不正常的是狀態欄的背景也一起變了,而狀態欄的文字是可以通過其他API去設置的:如 [[UIApplicationsharedApplicationsetStatusBarStyle:UIStatusBarStyleLightContent];

2、文字是附於背景上方的,因此考慮在這之間插入一個矩形顏色塊(甚至圖片也可以)

3、根據這種思路,第二種思路也隨之產生,就是制作出20+44=64高度的圖片,作為導航欄背景圖,其中上方20為狀態欄的顏色。

4、本文實現第一種思路,並且模擬器和真機以及IOS6,7均已驗證可行

//7.0以上版本通過一句代碼解決高度上升問題

if ([[[UIDevicecurrentDevicesystemVersiondoubleValue]>=7.0) {

     self.edgesForExtendedLayout=UIRectEdgeNone;

}

//創建一個高20的假狀態欄背景

UIView *statusBarView = [[UIView allocinitWithFrame:CGRectMake(0, -2032020)];

//將它的顏色設置成你所需要的,這里我選擇了黑色,表示我很沉穩

    statusBarView.backgroundColor=[UIColor blackColor];

//這里我的思路是:之前不理想的狀態是狀態欄顏色也變成了導航欄的顏色,但根據這種情況,反而幫助我判斷出此時的狀態欄也是導航欄的一部分,而狀態欄文字浮於上方,因此理論上直接在導航欄上添加一個subview就是他們中間的那一層了。

//推得這樣的代碼:

    [self.navigationController.navigationBar addSubview:statusBarView];

//修改導航欄文字顏色,這里我選擇白色,表示我很純潔

    [[UIApplicationsharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

//設置導航欄的背景圖片

[self.navigationController.navigationBarsetBackgroundImage:[UIImageimageNamed:@"bg.jpg"] forBarMetrics:UIBarMetricsDefault];

 


免責聲明!

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



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