启动时无法隐藏状态栏

Posted

技术标签:

【中文标题】启动时无法隐藏状态栏【英文标题】: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 时我无法做到 【参考方案1】:

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

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

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

- (BOOL)prefersStatusBarHidden return YES;

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

    带有隐藏状态栏的勾号

    不勾选隐藏状态栏

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

在 plist 中。

View controller-based status bar appearance = NO

然后在 viewWillAppear 方法中。

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

【讨论】:

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

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

【讨论】:

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

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

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

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

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

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

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

【讨论】:

【参考方案5】:

为了实现您正在寻找的内容,您需要在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; 我的猜测可能是这种行为。 您是否尝试过从视图控制器中删除该方法?

以上是关于启动时无法隐藏状态栏的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 在显示初始屏幕期间隐藏状态栏

如何在 iOS 7 和 iOS 6 中出现动画启动画面期间隐藏状态栏?

如何显示最初从 plist iphone 中隐藏的状态栏

iOS7 无法隐藏状态栏

安卓的状态栏怎么去掉

iPhone/iOS 状态栏未隐藏在 Xcode 项目中