【问题标题】:Remove status bar color from a single screen if its set in app delegate如果在应用程序委托中设置,则从单个屏幕中删除状态栏颜色
【发布时间】:2025-12-16 10:30:02
【问题描述】:

我在 appdelegate 类中设置状态栏颜色如下。

- (void)transitionToViewController:(UIViewController *)viewController
                    withTransition:(UIViewAnimationOptions)transition
{
    self.window.rootViewController = viewController;

    //SET STATUS BAR COLOR
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
    {
        UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 20)];
        view.backgroundColor= [UIColor colorWithRed:0.96 green:0.96 blue:0.96 alpha:1.0];
        [self.window.rootViewController.view addSubview:view];
    }
}

当我尝试从单个屏幕中删除它时,我失败了。它保留了我在 appdelegate 中设置的背景颜色,但删除了文本。我也想删除背景。

这是我尝试删除状态栏的方法:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

状态栏如下所示:

【问题讨论】:

标签: ios objective-c xcode uistatusbar


【解决方案1】:

在 info.plist 中添加这个基于 View 控制器的状态栏外观设置 YES

View controller-based status bar appearance = YES

基于视图控制器的隐藏集

在视图控制器中添加方法。

目标-C

- (BOOL)prefersStatusBarHidden {
    return YES;
}

斯威夫特

override func prefersStatusBarHidden() -> Bool {
    return true
}

【讨论】:

  • prefersStatusBarHidden 甚至没有被调用。我添加到 plist。
  • 请您在设备上试用一下
  • 还是一样。它没有被调用。
  • ok..在你的 Appdelegate 中设置 application.setStatusBarHidden(true, with: .none) 然后尝试是否被调用
  • 我没听懂。
【解决方案2】:

将以下内容添加到您的 Info.plist:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

这也有效(iOS7+):

override func prefersStatusBarHidden() -> Bool {
    return true
}

您还需要调用:

setNeedsStatusBarAppearanceUpdate()

在说 viewDidLoad()。

【讨论】:

  • objective c 版本是什么?
  • -(BOOL)prefersStatusBarHidden{ 返回 YES; } [self setNeedsStatusBarAppearanceUpdate];
  • 这没有帮助。因为它对整个应用程序隐藏了 uistatusbar。
  • 你只需要在其他视图控制器中设置 No -(BOOL)prefersStatusBarHidden { return NO; } [self setNeedsStatusBarAppearanceUpdate];
  • 浏览量超过 50 次,所以我想这不是最好的方法。