状态栏显示在iOS 7中的视图边界上

Bhr*_*esh 32 iphone ios6 ios7 xcode5

我尝试在iOS 7中测试我的应用程序,然后我发现我的视图显示在状态栏上...正如我读到的,在iOS 7中,状态栏被隐藏.那么如何让它兼容在iOS 6和iOS 7中运行?我是否必须为每个屏幕为不同的iOS版本制作不同的.xib文件?

我一直在阅读:如果标准应用程序的两个版本都应该具有类似的布局,请使用"自动布局"创建在两个版本的iOS中都能正常工作的UI.要支持多个版本的iOS,请指定一组约束,Auto Layout可以使用这些约束来调整storyboard或XIB文件中的视图和控件(要了解有关约束的更多信息,请参阅"约束Express视图之间的关系").

如果标准应用的两个版本都应具有相似的布局,并且您没有使用自动布局,请使用偏移.要使用偏移,请首先更新iOS 7的UI.接下来,指定将早期UI中每个元素的原点,高度和宽度定义为iOS 7 UI中元素新位置的偏移量的值.

但是当我在.xib中使用autolayout时,它会显示一个错误,autolayout在iOS 6的先前版本中.

我该如何解决这个问题?

Ner*_*ken 37

iOS 7显然支持某些视图隐藏的状态栏,但不支持其他视图.要为所有视图隐藏它,请执行以下操作:

  1. 确保Hide during application launch仍然选中,以支持以前的操作系统版本.
  2. 在Info.plist文件中,添加View controller-based status bar appearance并设置为NO.
  3. 您可能需要在构建之前"清理",(我这样做),但之后您的应用程序应该像以前一样工作:没有状态栏悬挂在您的视图上!

  • 这对我有用,只是在显示UIImagePicker后状态栏重新出现. (4认同)
  • 这似乎完全隐藏了我不想做的状态栏.理想情况下,我只想向下移动我的内容,以便状态栏不会悬停在它上面并重叠我的应用标题.仅供参考我正在制作一个phonegap/cordova应用程序. (2认同)

NIK*_*HIL 24

您可能需要在每个视图控制器上添加以下代码.

- (void)viewDidLoad
{
    [super viewDidLoad];
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])
    {
        [self prefersStatusBarHidden];
        [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
    }
    else
    {
        // iOS 6
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
    }
}

// Add this method
- (BOOL)prefersStatusBarHidden {
    return YES;
}
Run Code Online (Sandbox Code Playgroud)


exp*_*ert 9

我有同样的问题.现在我做了两个黑客,并决定我将去哪个:

  • 您可以通过设置UIStatusBarHidden和完全隐藏状态栏UIViewControllerBasedStatusBarAppearance.
  • 在我的应用程序中,我创建了一个值为0的Top Spacing约束,如果我检测到该应用程序在iOS 7上运行,我会将其更改为20.

如何为状态栏区域创建Autolayout帐户?


好吧,我明白了.

在您的子视图(BRSMyListSubViewController在我的情况下)中viewDidLoad,您需要设置这两个中的一个

self.edgesForExtendedLayout = UIRectEdgeNone;
self.automaticallyAdjustsScrollViewInsets = NO;
Run Code Online (Sandbox Code Playgroud)

要么

self.edgesForExtendedLayout = UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars = YES;
Run Code Online (Sandbox Code Playgroud)

有趣的是,在根视图控制器,这些值被设置为默认值UIRectEdgeAll,NO并且YES分别,但其tableView不是下导航栏和页脚.

我不知道为什么它如此不合逻辑.

同样奇怪的是edgesForExtendedLayout,必须与其他两个属性中的一个混合,即使它明确地对行为负责.


Kaz*_*awa 8

如果您想在iOS 7下使用Xcode 5 显示状态栏,只需重新排列按钮和其他子视图,以在状态栏周围留出足够的空间.但是,等一下!我也喜欢支持iOS 6.我怎么做?

我找到了Apple的文档,并在文档中找到了"支持两个版本的标准应用程序"标题.

如果您正在编辑XIB文件,请选择它并单击助理编辑器.你可以在那里找到"手动,自动......"菜单.然后选择"预览".

在此输入图像描述

然后你会找到一个并排的视图布局.然后你会注意到右窗格右侧底部有一个弹出按钮(视图); 它说"iOS 7及更高版本".您可以选择"iOS 6.1及更早版本".WOA!现在,您可以在不影响iOS 7布局的情况下对iOS 6.1进行调整.

在此输入图像描述

如果您正在处理故事板,它基本上是相同的.您选择一个视图控制器对象,然后单击助手编辑器模式,选择"预览",然后选择"iOS7及更高版本"...... Bluh Bluh Bluh.

我不确定,但只有助理编辑才能切换到iOS 7 +/iOS 6-模式.我刚刚发现这个,所以请指出,如果有任何误解或其他伎俩.

  • "现在你可以在不影响iOS 7布局的情况下对iOS 6.1进行调整".我不认为这是真的.它只是一个预览工具. (3认同)