我知道如何通過這樣來改變一個導航欄(和狀態欄)的顏色:導航欄隱藏在iOS 7中時,如何更改狀態欄的顏色?
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
但是,當我躲在我的導航欄,狀態欄的顏色恢復到透明的顏色。
即使隱藏導航欄,如何保持狀態欄顏色與barTintColor相同?
我知道如何通過這樣來改變一個導航欄(和狀態欄)的顏色:導航欄隱藏在iOS 7中時,如何更改狀態欄的顏色?
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
但是,當我躲在我的導航欄,狀態欄的顏色恢復到透明的顏色。
即使隱藏導航欄,如何保持狀態欄顏色與barTintColor相同?
添加UIView
狀態欄下其backgroundColor
屬性設置爲導航欄barTintColor
您只需添加一個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];
瞧
你們想不想看到這樣的快速版本?或者代碼簡單到足以轉換? – Pavan
設置self.tableView.contentInset = UIEdgeInsetsZero
在self.navigationController?.navigationBarHidden = true
這奏效了,我(斯威夫特):
let statusBarBGView = UIView(frame: UIApplication.sharedApplication().statusBarFrame)
statusBarBGView.backgroundColor = .whiteColor() //color of your choice
view.addSubview(statusBarBGView)
我的問題是我已經設置我的導航欄被隱藏,這使得狀態欄的背景變得清晰。這導致了我的tableView單元格在滾動時顯示在statusBar後面。
我的解決方案很簡單,設置viewcontrollers視圖的背景顏色。例如
[self.view setBackgroundColor:[UIColor blackColor]];
當OS選擇不顯示狀態欄時,需要處理添加視圖。
在它後面添加一個具有相同色調的子視圖 – Maximilian
可能有助於瞭解狀態欄始終是透明的。在它後面放置一個'UIView'與將'UINavigationBar'放在它後面沒什麼區別。 – nhgrif
@nhgrif是的,這是真的,但狀態欄是320×20,不同於導航欄的尺寸。 –