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

6
我想显示一个模态视图,并希望它覆盖iPhone的状态栏。
我尝试将模态视图控制器的wantsFullScreenLayout属性设置为YES;我还将其父级属性设置为YES。这不起作用,可能是因为模态视图显示在主窗口内容下面,包括状态栏。
我的第二种方法放弃了整个“wantsFullScreenLayout”技术,而是在模态视图显示之前隐藏状态栏,然后在模态视图关闭后再打开它。这有效,直到最后...模态视图的父视图布局不正确(其导航栏部分隐藏在状态栏后面)。调用-[view setNeedsLayout]没有任何效果。
我应该如何解决这个问题?
谢谢。
2个回答

12

虽然我加入讨论比较晚,但我认为我可以帮其他人节省一些麻烦。

我有一个 VC,在 NavController 中进行了多次推送(我们称该 VC 为父级)。现在我想显示一个模态屏幕(子级),并隐藏导航栏和状态栏。经过多次实验,我知道这个方法可行...

1)因为我通过在父级中调用 presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated 来呈现 CHILD VC,所以导航栏就不再参与其中(无需隐藏它)。

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

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

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

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

希望这能帮到你。


+1 for 4). 我在不使用其他步骤的情况下解决了它,并将状态栏在模态视图的-viewWillDisappear:中重新显示。 - Kristofer Sommestad
2
关于第四步,方法签名是 - (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation。你发送了一个 BOOL 作为第二个参数,而不是 UIStatusBarAnimation。 - Or Arbel

2
您需要的是在UIApplication类中使用- (void)setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated方法。

可以像这样实现:

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

那应该使用一个漂亮的淡出动画来隐藏状态栏。

我已经尝试过那个方法(请参见上面的第二种方法)。我没有问题让状态栏隐藏和重新出现;问题是当我让它重新出现时,视图布局无法正确显示。谢谢。 - Greg Maletic
只需要调整视图大小吗?将其框架设置为(0,20,320,460)即可。 - Jasarien
成功了!但我仍不确定为什么我必须手动设置它...不过还是谢谢! - Greg Maletic
我可能错了 - 但我认为setNeedsLayout只会调整子视图的大小/位置,而不是视图本身。如果您调用setNeedsDisplay,它可能会起作用,但我不能保证任何结果。 - Jasarien
你在哪里调整视图大小并重新显示状态栏?我尝试在viewWillAppear中进行两者操作,但没有成功。状态栏会出现,但布局不正确。 - AndrewS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接