在我的iOS swift应用程序中,我使用自定义UICollectionViewLayout创建了UIColletctionViewController,它创建了可水平滚动的父子网格布局。计算此布局的高度,使其适合我的屏幕高度。
override var collectionViewContentSize: CGSize {
return CGSize(
width: someWidth,
height: collectionView?.frame.height ?? 0
)
}
当我在导航栏中嵌入我的集合视图控制器时,整个集合视图会向下移动,但collectionView?.frame.height
保持不变,因此我的内容会溢出。
如果没有导航栏,如何获得这个减少的可用空间的高度?
答案 0 :(得分:1)
如果您的视图控制器将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 = UIRectEdge(rawValue: UInt(0))
,然后您的视图控制器视图将不会延伸到任一边缘并且将始于导航栏下方,因此您的集合视图的框架将位于可见边界中,您可以使用{{ 1}}就像你的例子一样。
答案 1 :(得分:0)