这个问题的确与我遇到的问题完全相同: iPhone X - How are we supposed to handle the space above table section headers? It's showing through the content
我有一个UICollectionView,顶部带有一个标题,其中包含一些按钮。 当UICollectionView向上滚动时,它将进入标题下方,然后在标题上方的空间中显示。
不幸的是,我不太了解Matt给出的答案,该怎么做: “只需给表视图控制器一个黑色背景的父视图控制器即可。您可以在代码中执行此操作,也可以在情节提要中完全不使用代码进行配置。”
我会直接与Matt联络,但是对此没有选择。
答案 0 :(得分:1)
基本上,Apple确实不支持表视图控制器或集合视图控制器,而该表视图控制器或集合视图控制器不是某些周围的视图控制器的子视图控制器。它可能是一个自定义的父视图控制器(如@AamirR的回答),但是最常见的方法是将其放在导航界面(UINavigationController)中。现在,导航栏位于屏幕顶部。它会自动在iPhone X的“缺口”后面长大。它会覆盖位于标题上方的单元格。
如果您查看Apple的应用程序,它们所有都是这样工作的。例如,查看“照片”应用程序中的“时刻”视图,或“日历”应用程序中的“月”视图。它们的顶部都有一个导航栏。
因此,将您的“主题视图控制器”嵌入导航控制器中。
iPhone 5:
iPhone X:
答案 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
}
}
通过以下两个步骤编辑情节提要:
SubjectParentViewController
SubjectViewController
移至SubjectParentViewController
最后,创建一个文件SubjectParentViewController.swift
并粘贴该类
这会将UITableViewController/UICollectionViewController
的视图设置为与布局边距和安全区域指南对齐: