如何在子视图控制器中更改iOS状态栏颜色

Str*_*ong 9 cocoa-touch objective-c uiviewcontroller ios uistatusbar

(iOS 7 Xcode 5.0.2)

我使用以下方法,在根视图控制器上成功将状态栏颜色更改为白色

[self setNeedsStatusBarAppearanceUpdate]; // Update status bar style

-(UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent; // Set status bar color to white
}
Run Code Online (Sandbox Code Playgroud)

导航到子视图控制器时,我正在尝试将状态栏颜色更改为黑色,我不知道该怎么做.(状态栏颜色仍为白色)

我搜索了一下,找到了这个方法:childViewControllerForStatusBarStyle 我读了Apple的文档,但是仍然不知道如何/在哪里使用它,我不确定这是不是正确的方法

任何人都知道如何更改子视图控制器中的状态栏颜色?

Jam*_*ost 13

默认情况下,似乎UINavigationController不幸的是没有提供合理的默认实现childViewControllerForStatusBarStyle.通过实现此方法,您可以告诉您的navigationController将所有调用推迟preferredStatusBarStyle到其最顶层的childViewController.

您可以UINavigationController在那里子类化并实现该方法,或者只是添加一个类别:

@implementation UINavigationController (ChildStatusBarStyle)

- (UIViewController *)childViewControllerForStatusBarStyle 
{
    return self.topViewController;
}

@end
Run Code Online (Sandbox Code Playgroud)

  • 我不确定是否在子类中声明的方法上提供类别(UINavigationController继承UIViewController)方法是一个好主意 - 如果我没有弄错,这会导致未定义的行为,因为类别不是正确的覆盖.因此我建议改为使用子类.不过,这是一个很好的答案!(1) (7认同)