【发布时间】:2012-10-13 02:43:41
【问题描述】:
我有一个滚动视图,顶部有一个 UIImage,UIImage 有它自己的视图控制器类 滚动视图位于主根控制器上。我将隐藏状态栏方法添加到根控制器,但是当我运行程序时,状态栏消失但留下一个空白,并且视图不会在状态栏空白上增长。我厌倦了其他方法,但我仍然得到相同的空白我还尝试启用垂直滚动,看起来状态栏位于我所有视图的顶部,当我向上滚动时,它一直在状态栏下方上升。
这可能是什么原因造成的?
【问题讨论】:
标签: iphone
我有一个滚动视图,顶部有一个 UIImage,UIImage 有它自己的视图控制器类 滚动视图位于主根控制器上。我将隐藏状态栏方法添加到根控制器,但是当我运行程序时,状态栏消失但留下一个空白,并且视图不会在状态栏空白上增长。我厌倦了其他方法,但我仍然得到相同的空白我还尝试启用垂直滚动,看起来状态栏位于我所有视图的顶部,当我向上滚动时,它一直在状态栏下方上升。
这可能是什么原因造成的?
【问题讨论】:
标签: iphone
您只是隐藏了状态栏,似乎其他组件没有自动扩展以占据该空间。确保在主根控制器下的所有组件中启用了“自动调整子视图大小”。
如果这没有帮助,您可以尝试在代码中重新定位和调整视图大小。比如:
CGRect frame = self.view.frame;
frame.origin.y -= statusBar.height;
frame.size.height += statusBar.height;
self.view.frame = frame;
【讨论】:
我遇到了同样的问题,我可以通过添加调用来解决它,
// Where self == Your View Controller with the status bar hidden
[self setWantsFullScreenLayout:YES];
然后我把它放在隐藏状态栏的 View Controller 的 init 方法中。然后我将以下代码添加到视图确实加载或视图将加载方法。
if ([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden:withAnimation:)]) {
[[UIApplication sharedApplication] setStatusBarHidden:hide withAnimation:NO];
} else { // Deprecated in iOS 3.2+.
id sharedApp = [UIApplication sharedApplication]; // Get around deprecation warnings.
[sharedApp setStatusBarHidden:hide animated:NO];
}
这将允许您拥有一个带有状态栏的视图控制器和一个没有状态栏的视图控制器。例如,照片应用程序就是这样做的。
【讨论】:
只是对具有动态状态栏高度的 JOM 有用解决方案的后续跟进(没有人应该依赖 20 像素的状态栏,如评论所示):
// fix frame
CGRect frame = window.frame;
if( ! [UIApplication sharedApplication].statusBarHidden ) {
int statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
frame.origin.y += statusBarHeight;
frame.size.height -= statusBarHeight;
}
self.view.frame = frame;
顺便说一句:在我的情况下,我需要重新计算框架并将其调整为可见的状态栏。
【讨论】: