3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
可能的根本原因
我遇到了同樣的問(wèn)題,并且發(fā)現(xiàn)它正在發(fā)生,因?yàn)槲覜](méi)有在我的應(yīng)用程序窗口中設(shè)置根視圖控制器。
的UIViewController
,其中我已經(jīng)實(shí)現(xiàn)的preferredStatusBarStyle
是在一個(gè)使用UITabBarController
,其控制的屏幕上的意見(jiàn)的外觀。
當(dāng)我將根視圖控制器設(shè)置為指向此時(shí)UITabBarController
,狀態(tài)欄更改開(kāi)始按預(yù)期正常工作(并且該preferredStatusBarStyle
方法被調(diào)用)。
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ ... // other view controller loading/setup code self.window.rootViewController = rootTabBarController; [self.window makeKeyAndVisible]; return YES;}
替代方法(在iOS 9中已棄用)
或者,您可以根據(jù)需要在每個(gè)視圖控制器中調(diào)用以下方法之一,具體取決于其背景顏色,而不必使用setNeedsStatusBarAppearanceUpdate
:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
要么
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
請(qǐng)注意,您還需要設(shè)置UIViewControllerBasedStatusBarAppearance
到NO
如果您使用此方法在plist文件。

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊
對(duì)于使用UINavigationController的任何人:
該UINavigationController
不上轉(zhuǎn)發(fā)該preferredStatusBarStyle
呼叫到其子視圖控制器。相反,它管理自己的狀態(tài) - 正如它應(yīng)該的那樣,它繪制在狀態(tài)欄所在的屏幕頂部,因此應(yīng)該負(fù)責(zé)它。因此preferredStatusBarStyle
,在導(dǎo)航控制器內(nèi)的VC中實(shí)現(xiàn)將不會(huì)做任何事情 - 它們永遠(yuǎn)不會(huì)被調(diào)用。
訣竅在于UINavigationController
決定返回什么UIStatusBarStyleDefault
或者用途的用途UIStatusBarStyleLightContent
。它以此為基礎(chǔ)UINavigationBar.barStyle
。默認(rèn)(UIBarStyleDefault
)會(huì)生成暗前景UIStatusBarStyleDefault
狀態(tài)欄。并UIBarStyleBlack
會(huì)給出一個(gè)UIStatusBarStyleLightContent
狀態(tài)欄。
如果你想UIStatusBarStyleLightContent
在UINavigationController
使用:
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊
所以我實(shí)際上為UINavigationController添加了一個(gè)類別,但使用了這些方法:
-(UIViewController *)childViewControllerForStatusBarStyle;-(UIViewController *)childViewControllerForStatusBarHidden;
并讓那些返回當(dāng)前可見(jiàn)的UIViewController。這使得當(dāng)前可見(jiàn)視圖控制器設(shè)置其自己的首選樣式/可見(jiàn)性。
這是一個(gè)完整的代碼片段:
在Swift中:
extension UINavigationController { public override func childViewControllerForStatusBarHidden() -> UIViewController? { return self.topViewController } public override func childViewControllerForStatusBarStyle() -> UIViewController? { return self.topViewController }}
在Objective-C中:
@interface UINavigationController (StatusBarStyle)@end@implementation UINavigationController (StatusBarStyle)-(UIViewController *)childViewControllerForStatusBarStyle { return self.topViewController;}-(UIViewController *)childViewControllerForStatusBarHidden { return self.topViewController;}@end
為了更好的衡量,以下是它在UIViewController中的實(shí)現(xiàn)方式:
在斯威夫特
override public func preferredStatusBarStyle() -> UIStatusBarStyle { return .LightContent}override func prefersStatusBarHidden() -> Bool { return false}
在Objective-C中
-(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; // your own style}- (BOOL)prefersStatusBarHidden { return NO; // your own visibility code}
最后,確保你的應(yīng)用程序plist中不具有“查看基于控制器的狀態(tài)欄外觀”設(shè)置為NO。刪除該行或?qū)⑵湓O(shè)置為YES(我認(rèn)為現(xiàn)在是iOS 7的默認(rèn)值?)
- 3 回答
- 0 關(guān)注
- 1410 瀏覽
添加回答
舉報(bào)