iPhone X-安全区域上方的空间问题

时间:2018-08-13 18:42:41

标签: ios uicollectionview storyboard

这个问题的确与我遇到的问题完全相同: iPhone X - How are we supposed to handle the space above table section headers? It's showing through the content

我有一个UICollectionView,顶部带有一个标题,其中包含一些按钮。 当UICollectionView向上滚动时,它将进入标题下方,然后在标题上方的空间中显示。

不幸的是,我不太了解Matt给出的答案,该怎么做: “只需给表视图控制器一个黑色背景的父视图控制器即可。您可以在代码中执行此操作,也可以在情节提要中完全不使用代码进行配置。”

我会直接与Matt联络,但是对此没有选择。

编辑: 我的情节提要的屏幕快照,非常感谢您对我需要做的事情的建议(请像对待狗或小孩一样说话(!)。 enter image description here

2 个答案:

答案 0 :(得分:1)

基本上,Apple确实不支持表视图控制器或集合视图控制器,而该表视图控制器或集合视图控制器不是某些周围的视图控制器的子视图控制器。它可能是一个自定义的父视图控制器(如@AamirR的回答),但是最常见的方法是将其放在导航界面(UINavigationController)中。现在,导航栏位于屏幕顶部。它会自动在iPhone X的“缺口”后面长大。它会覆盖位于标题上方的单元格。

如果您查看Apple的应用程序,它们所有都是这样工作的。例如,查看“照片”应用程序中的“时刻”视图,或“日历”应用程序中的“月”视图。它们的顶部都有一个导航栏。

因此,将您的“主题视图控制器”嵌入导航控制器中。

iPhone 5:

enter image description here

iPhone X:

enter image description here

答案 1 :(得分:1)

您必须为UICollectionViewController创建一个父级视图控制器,并将SubjectViewController添加为该父级的子级,如下所示:

class SubjectParentViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = .gray

        // Add collection view as a child view controller
        let collectionViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SubjectVC")
        collectionViewController.willMove(toParentViewController: self)
        self.addChildViewController(collectionViewController)

        let collectionView: UIView = collectionViewController.view
        collectionView.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(collectionView)
        collectionViewController.didMove(toParentViewController: self)

        // add auto-layout constraints to layout guides
        var guide: UILayoutGuide!

        guide = self.view.layoutMarginsGuide
        collectionView.leadingAnchor.constraint(equalTo: guide.leadingAnchor).isActive = true
        collectionView.trailingAnchor.constraint(equalTo: guide.trailingAnchor).isActive = true

        guide = self.view.safeAreaLayoutGuide
        collectionView.topAnchor.constraintEqualToSystemSpacingBelow(guide.topAnchor, multiplier: 1.0).isActive = true
        collectionView.bottomAnchor.constraintEqualToSystemSpacingBelow(guide.bottomAnchor, multiplier: 1.0).isActive = true
    }

}

通过以下两个步骤编辑情节提要:

  1. 创建一个视图控制器,并将其类设置为高于自定义类SubjectParentViewController
  2. 将所有任务从SubjectViewController移至SubjectParentViewController

最后,创建一个文件SubjectParentViewController.swift并粘贴该类

这会将UITableViewController/UICollectionViewController的视图设置为与布局边距和安全区域指南对齐:

enter image description here