iPhone X - space 以上安全区域问题
iPhone X - space above safe area issue
这个问题确实已经提出了与我遇到的问题完全相同的问题:
我有一个顶部有 header 的 UICollectionView,它包含几个按钮。
当 UICollectionView 向上滚动时,它会进入 header 下方,然后显示在 header 上方的 space 中。
不幸的是,我不太理解 Matt 给出的答案,如何:
"It's just a matter of giving the table view controller a parent view controller with a black background. You can do that in code, or you can configure it entirely without code in the storyboard."
我很想直接联系 Matt,但没有这个选项。
编辑:
我的情节提要的屏幕截图,非常感谢有关我需要做什么的建议(请像对待狗或小狗一样说话 child'(!)
基本上,Apple 确实不支持 table 视图控制器或 collection 不是某些周围视图控制器的 child 视图控制器的视图控制器。它可以是自定义 parent 视图控制器(如@AamirR 的回答),但最常见的方法是将它放在导航界面(UINavigationController)中。现在导航栏占据了屏幕的顶部。它会自动在 iPhone X 中的 "notch" 后面长大。它会覆盖 header 上方的单元格。
如果您查看 Apple 的应用程序,它们所有 都是这样工作的。例如,查看照片应用中的时刻视图,或日历应用中的月视图。它们的顶部都有一个导航栏。
因此,将您的主题视图控制器嵌入到导航控制器中。
iPhone 5:
iPhone X:
您必须为 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
}
}
通过以下 2 个步骤编辑故事板:
- 创建一个视图控制器,并将其 class 设置为高于自定义 class
SubjectParentViewController
- 将所有 segues 从
SubjectViewController
移动到 SubjectParentViewController
最后,创建一个文件 SubjectParentViewController.swift
并粘贴 class
这会将 UITableViewController/UICollectionViewController
的视图设置为与布局边距和安全区域指南对齐:
这个问题确实已经提出了与我遇到的问题完全相同的问题:
我有一个顶部有 header 的 UICollectionView,它包含几个按钮。 当 UICollectionView 向上滚动时,它会进入 header 下方,然后显示在 header 上方的 space 中。
不幸的是,我不太理解 Matt 给出的答案,如何: "It's just a matter of giving the table view controller a parent view controller with a black background. You can do that in code, or you can configure it entirely without code in the storyboard."
我很想直接联系 Matt,但没有这个选项。
编辑:
我的情节提要的屏幕截图,非常感谢有关我需要做什么的建议(请像对待狗或小狗一样说话 child'(!)
基本上,Apple 确实不支持 table 视图控制器或 collection 不是某些周围视图控制器的 child 视图控制器的视图控制器。它可以是自定义 parent 视图控制器(如@AamirR 的回答),但最常见的方法是将它放在导航界面(UINavigationController)中。现在导航栏占据了屏幕的顶部。它会自动在 iPhone X 中的 "notch" 后面长大。它会覆盖 header 上方的单元格。
如果您查看 Apple 的应用程序,它们所有 都是这样工作的。例如,查看照片应用中的时刻视图,或日历应用中的月视图。它们的顶部都有一个导航栏。
因此,将您的主题视图控制器嵌入到导航控制器中。
iPhone 5:
iPhone X:
您必须为 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
}
}
通过以下 2 个步骤编辑故事板:
- 创建一个视图控制器,并将其 class 设置为高于自定义 class
SubjectParentViewController
- 将所有 segues 从
SubjectViewController
移动到SubjectParentViewController
最后,创建一个文件 SubjectParentViewController.swift
并粘贴 class
这会将 UITableViewController/UICollectionViewController
的视图设置为与布局边距和安全区域指南对齐: