為尊重文章原作者,轉載務必注明原文地址:http://www.cnblogs.com/wt616/p/3784717.html
先看效果圖:
在自定義導航欄背景時,可能會遇到以下一些問題:
1、當設置導航欄背景后,狀態欄的顏色也會跟着一起改變掉,這可能不是你說希望看到的
2、IOS7以上的版本和低版本顯示出來的導航欄高度位置有差別,這個差別就是狀態欄的高度20,為了兼容低版本,必須統一
解決思路:
1、不正常的是狀態欄的背景也一起變了,而狀態欄的文字是可以通過其他API去設置的:如 [[UIApplicationsharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
2、文字是附於背景上方的,因此考慮在這之間插入一個矩形顏色塊(甚至圖片也可以)
3、根據這種思路,第二種思路也隨之產生,就是制作出20+44=64高度的圖片,作為導航欄背景圖,其中上方20為狀態欄的顏色。
4、本文實現第一種思路,並且模擬器和真機以及IOS6,7均已驗證可行
//7.0以上版本通過一句代碼解決高度上升問題
if ([[[UIDevicecurrentDevice] systemVersion] doubleValue]>=7.0) {
self.edgesForExtendedLayout=UIRectEdgeNone;
}
//創建一個高20的假狀態欄背景
UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, -20, 320, 20)];
//將它的顏色設置成你所需要的,這里我選擇了黑色,表示我很沉穩
statusBarView.backgroundColor=[UIColor blackColor];
//這里我的思路是:之前不理想的狀態是狀態欄顏色也變成了導航欄的顏色,但根據這種情況,反而幫助我判斷出此時的狀態欄也是導航欄的一部分,而狀態欄文字浮於上方,因此理論上直接在導航欄上添加一個subview就是他們中間的那一層了。
//推得這樣的代碼:
[self.navigationController.navigationBar addSubview:statusBarView];
//修改導航欄文字顏色,這里我選擇白色,表示我很純潔
[[UIApplicationsharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
//設置導航欄的背景圖片
[self.navigationController.navigationBarsetBackgroundImage:[UIImageimageNamed:@"bg.jpg"] forBarMetrics:UIBarMetricsDefault];