以编程方式为 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.bottomAnchor
和 bottomLayoutGuide.topAnchor
)。
【讨论】:
是的,我在你提到它之前大约 10 分钟尝试了这个。不知道为什么我之前没有想到这一点。当解决方案看起来如此清晰时总是很有趣!【参考方案2】:我认为标记的答案不是在 iOS 上处理安全区域的正确方法。
对于 ScrollViews、TableViews 和 CollectionViews,处理它们的标准方法是将边缘固定到 ViewController 的视图,然后设置内容插入调整:
collectionView.contentInsetAdjustmentBehavior = .always
这意味着内容将在屏幕底部很好地滚动。
【讨论】:
以上是关于以编程方式为 safeArea 调整 collectionView的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式调整 UITextField 的大小会自动恢复为旧大小
以编程方式将视图大小调整为 UIInterfaceOrientationMaskLandscapeLeft