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

时间:2017-10-10 15:53:43

标签: ios swift uicollectionview uinavigationbar

在我的iOS swift应用程序中,我使用自定义UICollectionViewLayout创建了UIColletctionViewController,它创建了可水平滚动的父子网格布局。计算此布局的高度,使其适合我的屏幕高度。

override var collectionViewContentSize: CGSize {
    return CGSize(
        width: someWidth,
        height: collectionView?.frame.height ?? 0
    )
}

当我在导航栏中嵌入我的集合视图控制器时,整个集合视图会向下移动,但collectionView?.frame.height保持不变,因此我的内容会溢出。

enter image description here

如果没有导航栏,如何获得这个减少的可用空间的高度?

2 个答案:

答案 0 :(得分:1)

如果您的视图控制器将edgesForExtendedLayout设置为.all.topautomaticallyAdjustsScrollViewInsets = 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 = UIRectEdge(rawValue: UInt(0)),然后您的视图控制器视图将不会延伸到任一边缘并且将始于导航栏下方,因此您的集合视图的框架将位于可见边界中,您可以使用{{ 1}}就像你的例子一样。

答案 1 :(得分:0)

我实际上找到了对我有用的非常简单的解决方案。我取消选中"在顶级酒吧"我的集合视图控制器的“属性”检查器中的选项。

UICollectionViewController