我有一个带分页的常见UICollectionView和所有。
仍然试图找出viewDidLoad:,viewWillAppear:和viewDidAppear:上的原因,仅在第一次视图调用时,调用myCollectionView.collectionView.contentSize.width时出现错误的大小。它始终以0宽度响应(高度总是正确的)。连续重新加载视图让我得到了正确的答案。
使用
self.collectionView.collectionViewLayout.collectionViewContentSize
在第一次加载时给我正确的宽度事件。
对我来说还是一个谜。
答案 0 :(得分:48)
所以我看到一个类似的问题,其中contentSize宽度始终为零。简单的答案是......在collectionView中可能还没有内容。这就是为什么它的内容大小为零。
我也注意到有时在我的UICollectionView上调用invalidateLayout
后,我发现self.collectionView.collectionViewLayout.collectionViewContentSize
与self.collectionView.contentSize
不同。
经过多次搜索,我找到了一个很好的提示here in this SO post
要使两个contentSize计算相同,我需要做的是在致电[self.collectionView layoutIfNeeded]
或[self.collectionView reloadData]
后立即致电[self.collectionView.collectionViewLayout invalidateLayout]
。
这实质上迫使重新加载立即发生,而不是在下一个runloop循环中发生。
我真的希望这能解决你的问题。
答案 1 :(得分:1)
就我而言,我总是使内容大小为零。 layoutIfNeeded()对我来说还不够,我必须在DispatchQueue.main.async中获取内容大小,即
self.collectionView.layoutIfNeeded()
DispatchQueue.main.async {
print(self.collectionView.contentSize)
}
答案 2 :(得分:0)
以上答案是正确的,但是如果您以编程方式或通过UICollectionViewController
添加xib/storyboard
,则必须注意scrollDirection
中的UICollectionViewFlowLayout()
{1}}。如果它是UICollectionViewController
,并且您要跟踪内容horizontal
,则很可能无法获得正确的结果。
就我而言,我使用了以下代码。
height