2014-01-14 158 views
3

我知道如何通過這樣來改變一個導航欄(和狀態欄)的顏色:導航欄隱藏在iOS 7中時,如何更改狀態欄的顏色?

self.navigationController.navigationBar.barTintColor = [UIColor redColor]; 

但是,當我躲在我的導航欄,狀態欄的顏色恢復到透明的顏色。

即使隱藏導航欄,如何保持狀態欄顏色與barTintColor相同?

+0

在它後面添加一個具有相同色調的子視圖 – Maximilian

+0

可能有助於瞭解狀態欄始終是透明的。在它後面放置一個'UIView'與將'UINavigationBar'放在它後面沒什麼區別。 – nhgrif

+0

@nhgrif是的,這是真的,但狀態欄是320×20,不同於導航欄的尺寸。 –

回答

2

添加UIView狀態欄下其backgroundColor屬性設置爲導航欄barTintColor

5

您只需添加一個UIView到當前視圖與正確的狀態欄。測量,然後改變顏色。

下面是一些示例代碼。 首先得到了狀態欄的框架:

//The statusBarFrame returns the frame in screen coordinates. I believe the correct way to get what this corresponds to in view coordinates is to do the following: 
- (CGRect)statusBarFrameViewRect:(UIView*)view 
{ 
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; 
    CGRect statusBarWindowRect = [view.window convertRect:statusBarFrame fromWindow: nil]; 
    CGRect statusBarViewRect = [view convertRect:statusBarWindowRect fromView: nil]; 
    return statusBarViewRect; 
} 
//source: http://stackoverflow.com/questions/3888517/get-iphone-status-bar-height 

然後在viewDidLoad方法創建視圖或當你隱藏用下面的代碼您的導航欄:

UIView *statusBarUnderLay = [[UIView alloc] initWithFrame:[self statusBarFrameViewRect:self.view]; 
[statusBarUnderLay setBackgroundColor:[UIColor yellow]]; 
[self.view addSubview:statusBarUnderLay]; 

+0

你們想不想看到這樣的快速版本?或者代碼簡單到足以轉換? – Pavan

0

設置self.tableView.contentInset = UIEdgeInsetsZeroself.navigationController?.navigationBarHidden = true

0

我找到了一個簡單的方法來解決使用InterfaceBuilder的問題。 我的問題是這樣的,有一個惱人的白色差距,隱藏導航欄後。

[Before[1]

然後我取消這兩個選項

options

然後它的工作原理

after## Heading ##

2

這奏效了,我(斯威夫特):

let statusBarBGView = UIView(frame: UIApplication.sharedApplication().statusBarFrame) 
statusBarBGView.backgroundColor = .whiteColor() //color of your choice 
view.addSubview(statusBarBGView) 

我的問題是我已經設置我的導航欄被隱藏,這使得狀態欄的背景變得清晰。這導致了我的tableView單元格在滾動時顯示在statusBar後面。

1

我的解決方案很簡單,設置viewcontrollers視圖的背景顏色。例如

[self.view setBackgroundColor:[UIColor blackColor]];

當OS選擇不顯示狀態欄時,需要處理添加視圖。

相關問題