Ios 添加导航栏时收缩集合视图
在iOS swift应用程序中,我使用自定义UICollectionViewLayout创建了UICollectionViewController,该自定义UICollectionViewLayout创建了可水平滚动的父子网格布局。这个布局的高度是经过计算的,所以它适合我的屏幕高度Ios 添加导航栏时收缩集合视图,ios,swift,uicollectionview,uinavigationbar,Ios,Swift,Uicollectionview,Uinavigationbar,在iOS swift应用程序中,我使用自定义UICollectionViewLayout创建了UICollectionViewController,该自定义UICollectionViewLayout创建了可水平滚动的父子网格布局。这个布局的高度是经过计算的,所以它适合我的屏幕高度 override var collectionViewContentSize: CGSize { return CGSize( width: someWidth, height
override var collectionViewContentSize: CGSize {
return CGSize(
width: someWidth,
height: collectionView?.frame.height ?? 0
)
}
当我将收藏视图控制器嵌入导航栏时,整个收藏视图向下移动,但collectionView?.frame.height
保持不变,因此我的内容向下溢出
如果视图控制器将edgesForExtendedLayout设置为
。all
或。top
和automaticallyAdjustsScrollViewInsets=true
,我如何在没有导航栏的情况下获得减少的可用空间的高度然后,您的collectionView的contentInset
将进行调整,以补偿导航栏的高度,因此请检查该插图
假设您的collectionView延伸到顶部(从导航栏后面开始),则获得可见高度:
let visibleHeight = collectionView.frame.height - collectionView.contentInset.top
在您的情况下,您可以:
override var collectionViewContentSize: CGSize {
return CGSize(
width: someWidth,
height: collectionView.frame.height - collectionView.contentInset.top
)
}
另一个选项是设置
edgesForExtendedLayout=uirectredge(rawValue:UInt(0))
然后视图控制器的视图将不会延伸到任何一条边,而是从导航栏下方开始,因此,您的集合视图的框架将在可见范围内,您可以像在您的示例中一样使用collectionViewContentSize
。我实际上找到了非常简单的解决方案。我在集合视图控制器的属性检查器中取消选中了“顶栏下”选项
当视图的帧发生更改时,尝试使CollectionView布局无效。不幸的是,这没有帮助。My
CollectionView.contentInset.top
设置为零,因此无法工作。但是第二个解决方案设置为edgesForExtendedLayout=uirectredge(rawValue:UInt(0))
有效。谢谢伟大的然后,您可以按照回答进行检查:)@Peracek btw,对于其他解决方案,请检查视图中的集合视图.contentInset.top
将出现或视图将布局子视图
,因为在视图中尚未调整插入。