显示模态视图时使 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 状态栏消失?的主要内容,如果未能解决你的问题,请参考以下文章