当前位置: 首页 > 知识库问答 >
问题:

在iOS 7中基于不同的ViewController设置灯光状态栏文本颜色的正确方法

巫马淳
2023-03-14

我需要让嵌入UINavigationController中的特定ViewController具有亮状态栏文本颜色(但其他ViewControllers的行为不同)。我知道至少有3种方法,但在我的案例中没有一种有效。

>

  • 如何在iOS7中更改状态栏文本颜色,方法主要是:

    >

  • 在plist
  • 中设置 UIViewControlllerBasedStatusBar外观YES
  • 在视图中做一个[自设置NeedsStatusBar外观更新];
  • 添加以下方法:

    - (UIStatusBarStyle)preferredStatusBarStyle{ 
          return UIStatusBarStyleLightContent; 
      }
    

    在iOS 7.0.3上运行时,这种方法对我不起作用,因为即使在我正确执行了所有3个步骤之后,preferredStatusBarStyle也不会被调用。

    UIStatusBarStyle PreferredStatusBarStyle在iOS 7上不起作用,方法主要是:

    将您的导航BarbarStyle设置为UIBarStyleBlackTransLucent将给出白色状态栏文本(即UIStatusBarStyleLightContent),并且UIBarStyleDefault将给出黑色状态栏文本(即UIStatusBarStyleDefault)。

    这种方法在iPhone上非常有效,但在iPad上却不行。

    将plist中的UIViewControlllerBasedStatusBar外观设置为NO,并使用

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    

    这显然不适用于这种情况,因为我只需要为两个ViewControllers指定不同的状态栏颜色。

    谢谢你的帮助!

  • 共有3个答案

    章德惠
    2023-03-14

    要在UINavigationController堆栈上为每个UIViewController单独设置UIStatusBarStyle,您必须首先子类化您的UINavigationController并覆盖ChilViewControlllerForStatusBarStyle方法。

    在UINavigationController子类中添加:

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

    然后,您可以使用preferredStatusBarStyle方法在每个UIViewController中将UIStatusBarStyle设置为您想要的任何内容。如:

    -(UIStatusBarStyle)preferredStatusBarStyle {
         return UIStatusBarStyleLightContent;
    }
    
    翟源
    2023-03-14

    这里是对Groot答案的一个改进,它是UINavigationController的一个简单类别,而不需要将UINavigationController子类化。

    敏捷的

    extension UINavigationController {
        override public func preferredStatusBarStyle() -> UIStatusBarStyle {
            return topViewController?.preferredStatusBarStyle() ?? .Default
        }
    }
    

    斯威夫特3

    extension UINavigationController {
        open override var preferredStatusBarStyle: UIStatusBarStyle {
            return topViewController?.preferredStatusBarStyle ?? .default
        }
    }
    

    目标-C

    @implementation UINavigationController (StatusBarStyle)
    
    - (UIStatusBarStyle)preferredStatusBarStyle 
    {
        return [self.topViewController preferredStatusBarStyle];
    }
    
    @end
    
    舒博雅
    2023-03-14

    对于对UINavigationController有此问题的人,我建议创建一个自定义UINavigationController,并在其上实现preferredStatusBarStyle

    - (UIStatusBarStyle)preferredStatusBarStyle
    {
        return [self.topViewController preferredStatusBarStyle];
    }
    

    这样,状态栏样式将是顶视图控制器的样式。现在,您可以实现视图控制器的首选状态栏样式。

     类似资料:
    • 所以在iOS 13之前,我正在设置NavigationController。导航栏。BarStyle可控制状态栏中文本的颜色。但是现在有了新的航空航天飞机,有没有办法控制它呢?我已经尝试覆盖preferedStatusBarStyle,并确保我的plist也包含该设置,但据我所知,如果您的视图控制器位于UINavigationController中,这是不荣幸的。 现在,对于iOS 13,我将使用

    • 我当前的应用程序运行在iOS 5和iOS 6上。 导航栏的颜色为橙色,状态栏的背景颜色为黑色,文本颜色为白色。但是,当我在iOS 7上运行相同的应用程序时,我观察到状态栏看起来是透明的,与导航栏的背景颜色相同,并且状态栏文本颜色为黑色。 因此,我无法区分状态栏和导航栏。 如何使状态栏与iOS 5和iOS 6中的状态栏相同,即黑色背景色和白色文本色?如何以编程方式执行此操作?

    • 如附图所示,状态栏文本为黑色。有没有办法换另一种颜色,比如白色?

    • 我当前的应用程序运行在iOS 4.2、5和6上。 导航栏为橙色,状态栏为黑色背景色。然而,当我在iOS 7上运行相同的应用程序时,我观察到状态栏看起来是透明的,与导航栏的背景颜色相同。 因此,我无法区分状态栏和导航栏。如何使状态栏与iOS 5和iOS 6中的状态栏相同,即黑色背景色和白色文本色?我如何通过编程实现这一点? 我在谷歌上搜索了一下,发现一个建议,我必须添加一个黑色背景,大约20像素高的

    • 状态栏文字颜色 sdk状态栏文字的颜色可以设置为白色或者黑色 , 设置方法如下: /** @param isDark true为黑字模式, false为白色模式 */ Ntalker.getInstance().statusBarDarkMode(boolean isDark);