【问题标题】:iPhone X - space above safe area issueiPhone X - 安全区域上方的空间问题
【发布时间】:2019-01-20 13:24:41
【问题描述】:

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

我有一个 UICollectionView,顶部有一个标题,上面有几个按钮。 当 UICollectionView 向上滚动时,它会在标题下方,然后在标题上方的空间中显示。

不幸的是,我并没有完全按照马特给出的答案,如何: “这只是给表格视图控制器一个带有黑色背景的父视图控制器的问题。您可以在代码中执行此操作,也可以在情节提要中完全不使用代码进行配置。”

我想直接联系马特,但没有这个选项。

编辑: 我的故事板的屏幕截图,非常感谢关于我需要做什么的建议(请像对待狗或小孩一样交谈'(!)

【问题讨论】:

  • 但是请参阅我的 cmets 关于 OP 自己的答案。 正确的 方法是将您的集合视图控制器包装在导航控制器中。导航栏隐藏单元格并在“缺口”后面向上延伸。如果您不能这样做,请编辑问题以描述您的视图/视图控制器层次结构。
  • 对不起,马特,我想我有某种心理障碍。 '将您的集合视图控制器包装在导航控制器中'到底是什么意思。我只是没有关注。

标签: ios uicollectionview storyboard


【解决方案1】:

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

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

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

iPhone 5:

iPhone X:

【讨论】:

  • 非常感谢,这可以单独通过情节提要完成还是按照 AamirR 的建议以编程方式完成?
  • 故事板没问题。只需选择视图控制器并从嵌入菜单中进行选择。您必须将 segues 重新连接起来,仅此而已。
  • Editor -> Embed In 是你想要的菜单。
【解决方案2】:

您必须为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 个步骤编辑您的故事板:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    相关资源
    最近更新 更多