隐藏UIStatusBar如何影响正在显示的UIViews?

3
我有一个主要由导航栏驱动的应用程序。少数情况需要呈现模态视图,其中一个情况需要隐藏状态栏。但是,即使在呈现模态视图之前隐藏状态栏,视图仍会偏移20像素。
即使在视图出现后将模态视图的框架设置为0, -20, 320, 480,它也会截断视图的顶部。
我还希望用户能够在点击屏幕时显示状态栏(和工具栏),就像视频播放器一样。因此,我将此屏幕的风格设置为黑色透明,并希望隐藏或显示状态栏不会导致视图上下跳动。
2个回答

2

从您下面的评论看,您正在针对 iPhone OS 2.x 进行开发,我有一个可能会有所帮助的建议。

在呈现模态视图之前,可以执行以下操作:

  [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
  [[self view] setFrame:CGRectMake(0, 0, 320, 480)];

确保模式视图的高度真正是480像素 - 有一次我被底部留下的空白20像素欺骗了。原来是因为我的视图仍然是460像素高(为了考虑状态栏),所以代码实际上起作用,但我的视图并不是正确的高度。

当隐藏模式视图时,这样做:

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
[[self view] setFrame:CGRectMake(0, 20, 320, 460)];

如果您正在使用 presentModalViewController,可能需要稍微调整代码 - 我尝试使用 -addSubview 进行了测试,因为我正在使用自定义动画。但基本原则应该是相同的(即更改父视图的框架)。


我之前已经实现过类似的功能,而且在2.x设备上运行良好。但是,在3.0上,由于某种原因,出现了更多奇怪的错误,所以我正在开发一个将在2.x设备上使用此功能,并在[self respondsToSelector:@selector(setWantsFullscreenDisplay:)]时调用[self setWantsFullscreenDisplay:YES]的东西。不确定这是否有效,但我会试一试。 - Ed Marty
你遇到了什么奇怪的错误?我在我的OS 3.0应用程序中实际上正在做这个,它运行良好。 - Chu Yeow
此外,请查看这个SO问题和被接受的答案,了解如何针对不同的操作系统版本进行定位:https://dev59.com/qXRA5IYBdhLWcg3wzhRY - Chu Yeow

2

这是一个来自3.0的API。我不认为它可以在2.x中解决...但我一点也不确定... - Jakob Dam Jensen
我没有在3.0上工作,因为我们的目标是最低公共分母,而且很多人仍然没有3.0。 - Ed Marty
但是,除非你的应用程序是免费或者非常便宜(猜测所有的应用程序都是这样的),否则你认为人们会购买你的应用程序吗?如果他们甚至不愿意进行免费升级(或在iPod Touch上进行非常便宜的升级),那么你认为有什么理由呢?这并不是攻击你,只是一个问题。这真的值得吗?难道苹果不要求应用程序编译到3.0才能上架Appstore吗?还是我搞混了?你有多少用户使用2.x和3.0版本的数据吗?我只是好奇... =) - Jakob Dam Jensen
尚未编译到3.0,只是在3.0上进行了测试并且可以使用3.0的编译器编译为2.x版本。这不是我决定的,而是由我的老板决定的。他很难被说服放弃旧的操作系统/平台,直到最后一刻。但这不是关键点。 - Ed Marty
将uiviewcontroller.wantsFullScreenLayout设置为YES;这是一个好的解决方案。 - HelloWorld

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