启动时无法隐藏状态栏
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】: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】:只需在项目设置中勾选隐藏状态栏即可。
-
项目设置 - 用于在应用启动时隐藏状态栏。
-
在需要隐藏的 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 中所述,我无法使用这种技术为状态栏设置动画...【参考方案3】:为了实现您正在寻找的内容,您需要在app.plist
file 中设置:
Status bar is initially hidden
到 YES
View controller-based status bar appearance
到 NO
然后在每个视图控制器中显示它
[[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
)
【讨论】:
以上是关于启动时无法隐藏状态栏的主要内容,如果未能解决你的问题,请参考以下文章