导航栏下的 CollectionView 内容

Posted

技术标签:

【中文标题】导航栏下的 CollectionView 内容【英文标题】:CollectionView content under navigation bar 【发布时间】:2017-12-11 12:48:58 【问题描述】:

希望 collectionView 的内容从屏幕的最顶部(状态栏顶部)开始,因为我有透明的导航栏,我想避免幻数,它应该与iPhone X 和其他 iPhone。

我尝试了什么?

collectionView.contentInset = UIEdgeInsets(top: -64, left: 0, bottom: 0, right: 0)

但这不是一个优雅的解决方案,对于 iPhone X 也不正确,需要增加插图

任何干净的解决方案?

面向 ios 10 和 11

【问题讨论】:

用主视图设置 UICollectionView 顶部 0。无需设置 contentInset。 【参考方案1】:

将此添加到包含UICollectionViewUIViewController 中,以防止集合视图位于导航栏下方。例如。在viewDidLoad 方法中:

斯威夫特 4

self.edgesForExtendedLayout = UIRectEdge.bottom

您甚至可以设置edgesForExtendedLayout = [] 以防止集合视图也进入UITabBars。

【讨论】:

这个对我有用,但另外我必须使用 -64(导航栏 + 状态栏)作为使用顶部安全区域限制集合视图的值。【参考方案2】:

对于 Swift 5 试试这个

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true

并从 IB Size Inspector 选项卡中将“content Insets”设置为“Never”。

【讨论】:

【参考方案3】:

如果您正在使用界面生成器,这可以通过将集合视图的顶部空间约束设置为具有来自 superview 的 0 constant不是 safe area 来轻松完成。

        view.addSubview(collectionView)
        collectionView.translatesAutoresizingMaskIntoConstraints = false
        collectionView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
        collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
        collectionView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 0).isActive = true
        collectionView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: 0).isActive = true

考虑到这种方法适用于 iOS11,但会在 iOS10 上崩溃。这是因为我仍在使用安全区域进行前导和尾随,iOS10 中没有安全区域。使用 Xcode 9 和界面生成器,您可以免费转换从安全区域到布局指南。

【讨论】:

代码可以吗?我正在使用SnapKit,但我可以使用本机代码布局系统 我从未使用过 snapkit,但使用自动布局 API 可能是这样的,我已经更新了答案【参考方案4】:

如果您的收藏视图已经全屏,您还应该将collectionView.contentInsetAdjustmentBehavior 设置为.never

【讨论】:

【参考方案5】:

在包含集合视图的视图控制器上添加此属性

self.edgesForExtendedLayout = []

【讨论】:

以上是关于导航栏下的 CollectionView 内容的主要内容,如果未能解决你的问题,请参考以下文章

导航栏下的 UICollectionView,但标签栏下没有

从导航栏下的第二个视图

横向播放视频后状态栏下的导航栏

iOS 去除导航栏下的黑线

获取 indexPathsForVisibleItems() 不包括半透明导航栏下的那些

标签更改后导航栏下的表格视图