Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 添加导航栏时收缩集合视图_Ios_Swift_Uicollectionview_Uinavigationbar - Fatal编程技术网

Ios 添加导航栏时收缩集合视图

Ios 添加导航栏时收缩集合视图,ios,swift,uicollectionview,uinavigationbar,Ios,Swift,Uicollectionview,Uinavigationbar,在iOS swift应用程序中,我使用自定义UICollectionViewLayout创建了UICollectionViewController,该自定义UICollectionViewLayout创建了可水平滚动的父子网格布局。这个布局的高度是经过计算的,所以它适合我的屏幕高度 override var collectionViewContentSize: CGSize { return CGSize( width: someWidth, height

在iOS swift应用程序中,我使用自定义UICollectionViewLayout创建了UICollectionViewController,该自定义UICollectionViewLayout创建了可水平滚动的父子网格布局。这个布局的高度是经过计算的,所以它适合我的屏幕高度

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
将出现
视图将布局子视图
,因为在
视图中尚未调整插入。