UITabBarController的子UIViewControllers重叠状态栏

时间:2016-06-18 20:39:41

标签: ios objective-c iphone xcode swift

  • Xcode 7
  • iOS Target 9.3
  • Swift 2

我在Xcode中创建了一个新的选项卡式应用程序:

enter image description here

我将第一个模板生成的UIViewController超级视图的背景更改为灰色然后运行应用程序,正如您在此屏幕截图中看到的那样,第一个UIView与状态栏重叠:

enter image description here

我已经阅读了很多文章,特别是在iOS 7中为状态栏分配空间。

我还在apple.developer.com上阅读以下引文:

“使用不透明的UINavigationController或UITabBarController的应用程序会自动将其内容保留在状态栏下方。”

一般来说,apple.developer.com网站上的这个链接确实有点过时了。

但是,据说,我期待UITabBarController加载带标签的子视图,并为UITabBarController的Storyboard中显示的状态分配空间:

enter image description here

我尝试将以下内容添加到我的UITabBarController类中:

override func viewDidLoad() {
    super.viewDidLoad()

    self.edgesForExtendedLayout = UIRectEdge.None
    self.automaticallyAdjustsScrollViewInsets = false;
}

我看了很多Stackoverflow问答帖子,我发现这个人在Stackoverflow上问了同样的问题: Using UITabBarController but status bar covers view

我知道如何在每个UiViewController选项卡的每个父视图的顶部布局指南中添加约束,但我试图避免添加新的顶级UIView,因为我现有的UIViewControllers选项卡都有UILabels,UIButtons, SuperView中的UICollections等我无法在Xcode Storyboard中为SuperView的Top Layout Guide添加约束。

使用SuperView我无法通过控制添加顶级约束拖动它似乎:

enter image description here

2 个答案:

答案 0 :(得分:2)

iOS在自动布局中为您处理此问题。当视图在状态栏下方延伸时,将“约束”固定为“垂直间距到顶部布局指南”中的0距离。约束,你会发现它按预期位于状态栏下面。

enter image description here

enter image description here

答案 1 :(得分:0)

所以我在@SeanCAtkinson的帮助下发现事情正在发挥作用。我需要为任何UIViewController添加一个约束到Top Layout指南,该UIViewController是一个标签,也就是我的UITabBarController的子项。

我认为任何标签的子项都会显示为状态栏分配的间隔。我认为UITabBarController正在这样做,基于它在Xcode 7 Storyboard中的外观:

enter image description here

从屏幕截图中可以看出,UITabBarController意味着选项卡将显示在浅灰色方块内,您可以看到它有顶部" guid"状态栏下方。

UITabBarController将阻止状态栏重叠子选项卡,无论是UIViewControllers,UICollectionViewControllers还是UITableViewControllers等,都不是必须使用Top Layout Guide约束你的子选项卡。

SuperView无法获得Top Layout指南,SuperView将始终全屏显示,这一点令人困惑。