首页 文章

iOS 7及更高版本:为每个视图控制器设置状态栏样式

提问于
浏览
75

我尝试了很多方法来设置状态栏样式(默认或轻量级),但不能让它在每个视图控制器的基础上工作 . 我只能为整个应用设置状态栏样式 .

有人有提示吗?

我试过 UIViewControllerBasedStatusBarAppearance

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
}

但这些方法不起作用 .

9 回答

  • 22

    在viewDidLoad方法上,输入:

    目标C.

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    [self setNeedsStatusBarAppearanceUpdate];
    

    迅速

    UIApplication.shared.statusBarStyle = .lightContent
    self.setNeedsStatusBarAppearanceUpdate()
    
  • 12

    EDIT: This solution is deprecated on iOS 9. Please choose one of the other answers.

    UIViewControllerBasedStatusBarAppearance 设置为NO,我可以使用以下方法将样式设置为白色文本:

    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;
    

    这是因为此样式的文本颜色在iOS 6及更低版本上为白色 .

    UPDATE: 根据@jowie你可以在iOS8上试试:

    [UIApplication sharedApplication].statusBarStyle = UIBarStyleBlack;
    
  • 3

    你试过这个吗?

    • 在Info.plist中将"View controller-based status bar appearance"( UIViewControllerBasedStatusBarAppearance )设置为 YES . ( YES 是默认值,因此您也可以将此值保留在plist之外 . )

    • 在viewDidLoad方法中,调用 [self setNeedsStatusBarAppearanceUpdate] .

    • 实现 preferredStatusBarStyle ,返回此视图控制器所需的状态栏样式 .

    - (UIStatusBarStyle) preferredStatusBarStyle { 
        return UIStatusBarStyleLightContent; 
    }
    
  • 0

    如果您的视图控制器位于独立的UINavigationController内,而不是基于故事板的UINavigationController的一部分,那么这里有一个问题,那么所有方法都失败了 . 我遇到了这种情况然后为了将状态栏设置为我使用的轻型样式

    [self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
    

    这对我很有用 .

  • 136

    在Swift中,我能够通过编写:

    let tbc : UITabBarController = self.window?.rootViewController as UITabBarController
    var moreViewController : UINavigationController = tbc.moreNavigationController
    
    moreViewController.navigationBar.barStyle = UIBarStyle.Black
    

    基本上你对最后一行很感兴趣 .
    这导致tabbar变为白色:

    enter image description here

    请注意,我没有更改 Info.plist 中的任何内容以实现此结果 .
    有关更改 Navigation Status Bar 的更多信息,请查看此链接:http://www.appcoda.com/customize-navigation-status-bar-ios-7/

  • 7

    我打赌你把你的视图控制器嵌入到导航控制器中 . 为避免将导航栏的样式设置为 .Black ,请使用此子类:

    class YourNavigationController: UINavigationController {
        override func childViewControllerForStatusBarStyle() -> UIViewController? {
            return topViewController
        }
    }
    
  • 13

    Swift:

    let tbc : UITabBarController = self.window?.rootViewController as UITabBarController
    var moreViewController : UINavigationController = tbc.moreNavigationController
    moreViewController.navigationBar.barStyle = UIBarStyle.Black
    

    Objective C:

    将此附加到 controller.m 文件viewDidLoad方法:

    [self setNeedsStatusBarAppearanceUpdate].
    

    然后在同一个 controller.m 文件中实现此方法:

    - (UIStatusBarStyle) preferredStatusBarStyle { 
        return UIStatusBarStyleLightContent; 
    }
    

    Official docs:

    https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/Bars.html

    Article I wrote on my blog:

    http://www.ryadel.com/2015/03/04/xcode-set-status-bar-style-and-color-in-objective-c/

  • 1

    在ViewController中,您要更改状态栏的颜色

    - (void) viewWillAppear:(BOOL)animated{
        [super viewWillAppear:animated];
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
    }
    
    - (void) viewWillDisappear:(BOOL)animated{
        [super viewWillDisappear:animated];
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    }
    
  • 71

    Swift扩展,因为我总是忘记这是如何工作的

    extension UIViewController {
        // utility to set the status bar appearance
        // Note: Make sure "View controller-based status bar appearance" is set to NO in your target settings or this won't work
        func setStatusBarForDarkBackground(dark: Bool) {
            UIApplication.sharedApplication().statusBarStyle = dark ? .LightContent : .Default
            setNeedsStatusBarAppearanceUpdate()
        }
    }
    

相关问题