【问题标题】:Can't hide status bar on launch启动时无法隐藏状态栏
【发布时间】:2016-03-28 14:23:53
【问题描述】:

我正在构建一个带有horizontal 页面导航的iOS 9 应用程序,需要在某些页面上显示状态栏,并在其他页面上隐藏它。我想使用淡入淡出动画所以我必须设置

View controller-based status bar appearance = NO

并像这样更新状态栏:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];

此过程在页面之间导航时完美运行,但我无法摆脱启动时的状态栏。

我试过设置:Status bar is initially hidden = YES

将此添加到NavigationControllers viewDidLoad:

[[UIApplication sharedApplication] setStatusBarHidden:YES];
self.statusBarHidden = YES;
[self setNeedsStatusBarAppearanceUpdate];

将此添加到 AppDelegates didFinishLaunchingWithOptions:

application.statusBarHidden = YES;

将这个添加到初始页面的 ViewController 中:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

在General->Deployment Info中勾选“隐藏状态栏”选项

并在链接的故事板元素中将“状态栏”设置为“无”

但状态栏仍然在启动时显示。如何在不更改 View controller-based status bar appearance 的值的情况下摆脱启动时的状态栏?

【问题讨论】:

  • 为什么你不想改变基于视图控制器的状态栏外观的值?
  • 我认为必须是 YES 才能为状态栏设置动画,当它设置为 NO 时我无法做到

标签: ios objective-c ios9


【解决方案1】:
changing plist file : 

set Status bar is initially hidden = YES

add row: View controller-based status bar appearance = NO

【讨论】:

  • 效果很好!谢谢
  • 这在 iPhone 11 或 iPhone Pro max 之前运行良好,我们如何隐藏在 iPhone 11 中
【解决方案2】:

只需在项目设置中勾选隐藏状态栏即可。

  1. 项目设置 - 用于在应用启动时隐藏状态栏。

  1. 在需要隐藏的 viewController 中添加以下内容。

- (BOOL)prefersStatusBarHidden { return YES; }

/----- 更新 -----/

  1. 带有隐藏状态栏的勾号

  2. 不勾选隐藏状态栏

/----- 动画状态栏-----/

在 plist 中。

View controller-based status bar appearance = NO

然后在 viewWillAppear 方法中。

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];

【讨论】:

  • 这两个我都试过了(忘了说第一个),不管是一起还是分开都没有效果
  • @Cbas 我刚刚在为您粘贴代码的演示中进行了尝试。为了验证,在 didFinishLaunchingWithOptions 方法中设置一个断点,返回 yes 并检查模拟器的状态栏。 -- 只做项目设置勾选选项并验证
  • 该行的屏幕是黑色的。我认为您必须编辑您的 plist 以重新创建我的情况
  • @Cbas - 使用更新的屏幕截图检查答案。让我知道我的理解中是否缺少任何内容。此外,如果您需要为所有人隐藏状态栏,请继续进行 plist 设置或在所有 vc 中添加 prefersStatusBarHidden 方法。
  • 如 OP 中所述,我无法使用这种技术为状态栏设置动画...
【解决方案3】:

为了实现您正在寻找的内容,您需要在app.plistfile 中设置:

Status bar is initially hiddenYES

View controller-based status bar appearanceNO

然后在每个视图控制器中显示

[[UIApplication sharedApplication] setStatusBarHidden:NO];

隐藏它:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

【讨论】:

  • 如果我把[[UIApplication sharedApplication] setStatusBarHidden:YES]; 放在我的视图控制器的viewDidLoad 中,它没有任何效果并且状态栏会出现。 plist 值已设置
  • 你是否覆盖了- (BOOL)prefersStatusBarHidden; 我猜可能有这种行为。
  • 您是否尝试过从视图控制器中删除该方法?
【解决方案4】:

Goto Targets->General->Deployment Info: 然后选择隐藏状态栏选项。

【讨论】:

  • 在 Xcode 中按 cmd+1 然后你会看到 Proejcts 和 Targets 选项卡所以选择 Target
【解决方案5】:

事实证明我所做的是正确的,但是在继承的代码中隐藏了一个错误的[[UIApplication sharedApplication] setStatusBarHidden:NO];。我抓住了它,但忽略了那条线......

(使用git grep StatusBar在git repo中查找改变状态栏的代码行)

另外,唯一需要的代码是:

View controller-based status bar appearance = NO(在 plist 中)

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];

状态栏需要更新的任何地方(通常在viewWillAppear

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2014-11-29
    • 2014-10-30
    • 2012-08-05
    • 1970-01-01
    相关资源
    最近更新 更多