显示模态视图时使 iPhone 状态栏消失?

Posted

技术标签:

【中文标题】显示模态视图时使 iPhone 状态栏消失?【英文标题】:Make iPhone status bar disappear when displaying a modal view? 【发布时间】:2011-01-12 09:40:53 【问题描述】:

我想显示一个模态视图,并希望它覆盖 iPhone 的状态栏。

我尝试将模态视图控制器的 WantsFullScreenLayout 属性设置为 YES;我还将其父级的属性也设置为 YES。这不起作用,大概是因为模态视图显示在主窗口内容下方,其中包括状态栏。

我的第二种方法放弃了整个“wantsFullScreenLayout”技术,转而在模态视图显示之前隐藏状态栏,然后在模态视图关闭后将其重新打开。这一直有效...模态视图的父视图布局不正确(其导航栏部分隐藏在状态栏后面。)调用 -[view setNeedsLayout] 什么都不做。

我应该如何解决这个问题?

谢谢。

【问题讨论】:

【参考方案1】:

加入讨论晚了,但我想我可以为别人省点麻烦。

我有一个 VC 多次推送到 NavController(我们称该 VC 为 PARENT)。现在我想显示一个隐藏导航栏和状态栏的模式屏幕(儿童)。经过大量实验,我知道这是可行的......

1) 因为我通过在 PARENT 中调用 presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated 来呈现 CHILD VC,所以导航栏不再涉及(无需隐藏)。

2) CHILD VC 笔尖中的视图大小为 320x480。

3) CHILD VC 在viewDidLoad 中设置self.wantsFullScreenLayout = YES;

4) 在展示 CHILD 之前,使用 [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:YES]; 隐藏状态栏

5) 在 PARENT 中使用委托协议方法关闭 CHILD VC,并在 dismissModalViewControllerAnimated:YES] 之前调用 [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:YES]; 以确保导航栏绘制在正确的位置

希望这会有所帮助。

【讨论】:

+1 表示 4)。我在没有其他步骤的情况下解决了它,并在 -viewWillDisappear: 模式视图中再次显示了状态栏。 关于第4步,方法签名为- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation。您向第二个参数发送了 BOOL 而不是 UIStatusBarAnimation。【参考方案2】:

你会想要UIApplication 类上的- (void)setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated

类似这样的:

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];

这应该用漂亮的淡入淡出动画隐藏状态栏。

【讨论】:

我已经尝试过了(参见上面的第二种方法)。我没有问题让状态栏隐藏并重新出现;问题是一旦我让它重新出现,视图布局就正确了。谢谢。 只是调整视图大小?将它的框架设置为 (0,20,320,460)? 成功了!仍然不完全确定为什么我必须手动设置...但谢谢! 我可能是错的 - 但我认为设置需要布局只会调整大小/重新定位子视图,而不是视图本身。如果你打电话给setNeedsDisplay,它可能会起作用,但我不能保证任何事情。 您在哪里调整视图大小并重新显示状态栏?我尝试在 viewWillAppear 中做这两个都没有运气。状态栏会回来,但布局不正确。

以上是关于显示模态视图时使 iPhone 状态栏消失?的主要内容,如果未能解决你的问题,请参考以下文章

仅在模态显示的视图控制器上隐藏状态栏

检查使用模态视图控制器隐藏的 iOS 状态栏

状态栏样式与 ParentViewController 不同的模态视图控制器

关闭模态视图后的状态栏和导航栏问题

iPhone:在多视图控制器中隐藏/显示状态栏的问题

iOS - 14、15 iPhone苹果手机的状态栏高度