我有一个ViewController
,它在UINavigationcontroller
中,但navigationBar是隐藏的。当我在iOS 7上运行该应用程序时,状态栏显示在我的视图顶部。有没有办法避免这种情况?
我不想写任何特定于操作系统的代码。
我尝试将View controller-based status bar appearance
设置为NO
,但没有解决问题。
发布于 2013-09-14 04:55:47
Xcode 5提供了专门为解决此问题而设计的iOS 6/7 Deltas
。在故事板中,我将视图向下移动了20像素,以便在iOS7上看起来更右。为了使其与iOS6兼容,我将Delta y
更改为-20。
由于我的故事板没有使用自动布局,为了在iOS6上适当地调整视图高度,我必须设置Delta height
和Delta Y
。
发布于 2013-09-15 19:08:49
如果你根本不想要任何状态栏,你需要用这个数据更新你的plist :为此,在plist中,添加这两个设置:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
在iOS 7中,你需要在设计你的应用时考虑到一个覆盖的透明状态栏。例如,请参阅新的iOS 7天气应用。
发布于 2013-09-13 08:09:28
这是iOS7上UIViewController
的默认行为。视图将是全屏的,这意味着状态栏将覆盖视图的顶部。
如果您在UINavigationController
中有一个UIViewController
,并且该navigationBar是可见的,那么您可以在您的viewDidLoad
中包含以下代码,或者使用navigationBar的背景图像来实现此目的。
self.edgesForExtendedLayout = UIRectEdgeNone;
如果你隐藏了navigationBar,那么你必须通过移动20个点来调整所有的UIView元素。我看不到任何其他的解决方案。使用自动布局会有一点帮助。
如果您想要向后兼容,下面是用于检测iOS版本的示例代码。
NSUInteger DeviceSystemMajorVersion() {
static NSUInteger _deviceSystemMajorVersion = -1;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSString *systemVersion = [UIDevice currentDevice].systemVersion;
_deviceSystemMajorVersion = [[systemVersion componentsSeparatedByString:@"."][0] intValue];
});
return _deviceSystemMajorVersion;
}
https://stackoverflow.com/questions/18775874
复制相似问题