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

Posted

技术标签:

【中文标题】导航栏下的 UICollectionView,但标签栏下没有【英文标题】:UICollectionView under Navigation Bar, but not under Tab Bar 【发布时间】:2020-05-01 11:47:50 【问题描述】:

我有一个 UICollectionView,我想进入导航栏下方。基本上我希望它忽略整个顶部安全区域,但仍然希望它尊重底部安全区域,因为那里有一个标签栏。这是它目前的样子:

但我希望第一个单元格直接从屏幕顶部开始,在(半透明)导航栏和状态栏下方。

如果我设置collectionView.contentInsetAdjustmentBehavior = .never,那么顶部效果很好,但是集合视图内容的底部被标签栏隐藏 - 你不能一直滚动到底部。所以我必须再次手动添加底部插图?如何获取标签栏的高度,包括具有主栏的设备上的任何底部安全区域?或者有没有更好的方法告诉collectionview只忽略顶部区域进行内容插入调整?

【问题讨论】:

您是否尝试以编程方式更改 collectionview 的 Y 位置? 【参考方案1】:

你只需要手动设置collection view的底部content inset,调整行为设置为.never后即可。

正确的插图(包括标签栏和任何主页栏)可以在safeAreaInsets中找到。

collectionView.contentInsetAdjustmentBehavior = .never
collectionView.contentInset.bottom = collectionView.safeAreaInsets.bottom

您需要在设置 safeAreaInsets 时执行此操作,例如 viewDidLayoutSubviews

据我所知,它曾经可以通过简单地调整包含视图控制器的 edgesForExtendedLayout 属性来实现,但我相信当 ios 11 中引入安全区域时,这已被逐步淘汰。

【讨论】:

啊,我快到了。但是每次我打印出collectionView.safeAreaInsets.bottom 时,它都是0 - 因为我是在viewDidLoad 中进行的。对 iOS 大叹一声 :) 哈,这让我有很多次......很好的旧视图生命周期嗯

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

导航栏下的 CollectionView 内容

从导航栏下的第二个视图

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

iOS 去除导航栏下的黑线

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

iOS TableViewController 滚动离开状态栏下的内容和导航栏