以编程方式为 safeArea 调整 collectionView

Posted

技术标签:

【中文标题】以编程方式为 safeArea 调整 collectionView【英文标题】:programmatically adjust collectionView for safeArea 【发布时间】:2018-01-29 02:11:44 【问题描述】:

我正在尝试设置一个水平滚动的集合视图,其中包含大小为 CGSize(宽度:view.frame.width,高度:view.frame.height)的单元格。但是,我的单元格在顶部被导航栏部分覆盖,并且使用边缘插图并不能完全适应所有设备。如何将单元格的顶部设置在新 iPhone X 导航栏的底部?

这就是问题所在。 collectionView 设置在默认的 navigationBar 下。

【问题讨论】:

发布您的代码。 【参考方案1】:
if #available(ios 11.0, *) 
    collectionView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
 else 
    collectionView.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true

您可能还应该考虑底部安全区域,尤其是 iPhone X(view.safeAreaLayoutGuide.bottomAnchorbottomLayoutGuide.topAnchor)。

【讨论】:

是的,我在你提到它之前大约 10 分钟尝试了这个。不知道为什么我之前没有想到这一点。当解决方案看起来如此清晰时总是很有趣!【参考方案2】:

我认为标记的答案不是在 iOS 上处理安全区域的正确方法。

对于 ScrollViews、TableViews 和 CollectionViews,处理它们的标准方法是将边缘固定到 ViewController 的视图,然后设置内容插入调整:

collectionView.contentInsetAdjustmentBehavior = .always

这意味着内容将在屏幕底部很好地滚动。

【讨论】:

以上是关于以编程方式为 safeArea 调整 collectionView的主要内容,如果未能解决你的问题,请参考以下文章

如何找到安全区域的高度和宽度?

以编程方式调整 UITextField 的大小会自动恢复为旧大小

以编程方式将视图大小调整为 UIInterfaceOrientationMaskLandscapeLeft

UITextView 以编程方式调整大小,但随后设置为旧的故事板值。

如何以编程方式设置 UIView 的自动调整大小掩码?

调整大小后使用自动布局以编程方式居中 UIImageVIew