在 iOS 7 中,状态栏出现在我的视图边界上 [重复]

Posted

技术标签:

【中文标题】在 iOS 7 中,状态栏出现在我的视图边界上 [重复]【英文标题】:Status bar appear over my view's bounds in iOS 7 [duplicate] 【发布时间】:2013-08-24 21:58:08 【问题描述】:

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

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

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

但是当我在 .xib 中使用自动布局时,它会显示一个错误,即自动布局在 iOS 6 之前的版本中。

我该如何解决这个问题?

【问题讨论】:

你应该向苹果开发者论坛询问 ios7 相关问题,因为它仍在 NDA 下。 查看此链接:***.com/questions/17678881/… @Developer 我已经浏览了这个链接..它的状态栏会显示为浅灰色..但我的问题是设置我的 ui 屏幕框架......因为我的整个屏幕向上 20 像素......在 ios7 中,但在 ios6 中正常... 所以在 Xcode5-DP 中存在类似 bug。我面临同样的问题。 这个视频解释了它 - youtube.com/watch?v=FtpBXdMSqRQ 该修复解释了如何同时隐藏 iOS 6 和 iOS 7 的状态栏。 【参考方案1】:

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

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

【讨论】:

这对我有用,只是状态栏在显示 UIImagePicker 后重新出现。 啊,在这里找到了图像选择器问题的答案:***.com/a/18747724/455794 这似乎完全隐藏了我不想做的状态栏。理想情况下,我只想向下移动我的内容,这样状态栏就不会悬停在它上面并与我的应用程序标题重叠。仅供参考,我正在制作一个 phonegap/cordova 应用程序。 @njtman 您可以通过以下链接执行此操作:***.com/questions/17074365/… Point 2) 仅允许我隐藏 iOS7 上的状态栏并将我的视图“移回屏幕”,现在一切都如我所愿。非常感谢。 (我没有导航栏,只有状态栏)【参考方案2】:

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

- (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;

【讨论】:

只需添加 prefersStatusBarHidden 方法就足够了。 @SG1 preferesStatusBarHidden 仅适用于 ios7,所以我认为您希望您的应用程序也可以在 ios 6 上运行,直到世界各地的设备都拥有 ios7 ;-) xib 中的状态栏保持为 None 因为没有显示状态栏。为什么你需要将近 10 行代码。我们应该要求在 iOS 6 和 iOS 7 中通过显示状态栏不隐藏来处理状态栏..【参考方案3】:

我也有同样的问题。现在我做了两个 hack,然后决定我会去:

您可以通过将UIStatusBarHiddenUIViewControllerBasedStatusBarAppearance 设置为true 来完全隐藏状态栏。 在我的应用程序中,我创建了一个值为 0 的顶部间距约束,如果我检测到应用程序在 iOS 7 上运行,我会以编程方式将其更改为 20。

如何为状态栏区域设置 Autolayout 帐号?


好吧,我想通了。

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

self.edgesForExtendedLayout = UIRectEdgeNone;
self.automaticallyAdjustsScrollViewInsets = NO;

self.edgesForExtendedLayout = UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars = YES;

有趣的是,在根视图控制器中,这些值分别设置为默认UIRectEdgeAllNOYES,但其tableView 不在导航栏和页脚下。

我不知道为什么这么不合逻辑。

同样奇怪的是,edgesForExtendedLayout 必须与其他两个属性之一混合,即使它显然是造成这种行为的原因。

【讨论】:

【参考方案4】:

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

找到documentation from Apple,在文档中找到“支持标准应用的两个版本”标题。

如果您正在编辑XIB file,请选择它并单击助手编辑器。您将能够在那里找到“手动、自动...”菜单。然后选择“预览”。

然后你会发现一个并排的视图布局。然后你会注意到右窗格(视图)的右下角有一个弹出按钮;它显示“iOS 7 及更高版本”。您可以选择“iOS 6.1 及更早版本”。哇!现在您可以在不影响 iOS 7 布局的情况下针对 iOS 6.1 进行调整。

如果您正在处理情节提要,则基本相同。您选择一个视图控制器对象,然后单击助手编辑器模式,选择“预览”,然后选择“iOS7 及更高版本”... Bluh Bluh Bluh。

我不确定,但只有助理编辑器能够切换到 iOS 7+/iOS 6- 模式。这是我最近才发现的,如果有什么误解或其他技巧,请指出。

【讨论】:

"现在您可以针对 iOS 6.1 进行调整,而不会影响 iOS 7 的布局"。我不认为这是真的。它只是一个预览工具。 “iOS 7 及更高版本”的选项也可以在故事板视图控制器的File inspector 找到【参考方案5】:

无需构建多xib。我认为您的问题是“20px”:同一个 XIB 文件在 iOS 6 中看起来很棒,但在 iOS 7 中却少了 20 个像素。

例如,您有一个视图,它的 Y = 0。在 iOS 6 中,它位于状态栏底部的旁边。在 iOS 7 中,它显示在状态栏上方。

您应该使用Xcode 5 打开您的 XIB 文件并启用助手编辑器。请按以下步骤操作:

    选择文件检查器,将“查看为”切换为“iOS 7 及更高版本”

    选择尺寸检查器,并用“-20”填充deltaY

    完成了!

【讨论】:

这听起来应该可以工作,但我无法让它在我的 iPhone 5 w/iOS 7 GM 上工作,这是使用 Xcode 5 GM 构建的应用程序。您的解决方案似乎没有效果。我也尝试清理项目。 这成功了 :) 但你必须在 xib 的每个视图/子视图中设置。 在相关条目上有一些代码的答案。 @Stunner ***.com/a/18976660/235206 有解决方案【参考方案6】:

您只需检查一次您的主 UIView 大小,适用于 iOS 7.0 及更高版本和 iOS 6.0 及更低版本,您可能会明白。

从 iOS 7 Apple 更改了主视图大小 = 固定这意味着如果您添加导航栏、标签栏,您的视图大小保持不变 [iPhone 4s : 320 *480, iPhone 5 : 320 * 568]。

【讨论】:

以上是关于在 iOS 7 中,状态栏出现在我的视图边界上 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

尽管 PList 设置正确,但状态栏仍出现在 iOS 7 中

容器视图控制器状态栏 iOS 7

旋转视图时如何在ios 7中停止状态栏覆盖ping

iOS 7 和 iOS 8 中 UIImagepickercontroller 的相机视图上的状态栏重叠

如何在 iOS 7 中隐藏状态栏?

状态栏文本颜色iOS 7 [重复]