Objective c UICollectionView首次加载时内容大小错误,请在加载后更正
我有一个通用的UICollectionView,包括分页和所有功能 仍在试图弄清楚为什么在viewDidLoad:、ViewWillAspect:和ViewDidAspect:,仅在第一次调用视图时,我在调用myCollectionView.collectionView.contentSize.width时得到了错误的大小。它总是以0宽度响应(高度总是正确的)。连续重新加载视图,得到正确的视图 求助于使用Objective c UICollectionView首次加载时内容大小错误,请在加载后更正,objective-c,uicollectionview,uicollectionviewlayout,Objective C,Uicollectionview,Uicollectionviewlayout,我有一个通用的UICollectionView,包括分页和所有功能 仍在试图弄清楚为什么在viewDidLoad:、ViewWillAspect:和ViewDidAspect:,仅在第一次调用视图时,我在调用myCollectionView.collectionView.contentSize.width时得到了错误的大小。它总是以0宽度响应(高度总是正确的)。连续重新加载视图,得到正确的视图 求助于使用 self.collectionView.collectionViewLayout.coll
self.collectionView.collectionViewLayout.collectionViewContentSize
这给了我第一次加载时的正确宽度事件
对我来说仍然是个谜。所以我看到了一个类似的问题,contentSize宽度总是为零。简单的答案是…collectionView中可能还没有内容。这就是为什么它的内容大小为零 我还注意到,有时在我的UICollectionView上调用
invalidateLayout
后,我发现self.collectionView.collectionViewLayout.collectionViewContentSize
与self.collectionView.contentSize
不同
经过多次搜索,我发现了一个很好的提示
我需要做的是在调用[self.collectionView reloadData]
或[self.collectionView.collectionViewLayout]之后立即调用[self.collectionView layout]
,以使两个contentSize计算结果相同
这本质上迫使重新加载立即发生,而不是在下一个运行循环中
我真的希望这能解决您的问题。上述答案是正确的,但如果您以编程方式或使用xib/storyboard
添加UICollectionViewController
,我们必须注意UICollectionViewFlowLayout()的scrollDirection
用于UICollectionViewController
。如果它是水平的,并且您想要跟踪内容的高度,那么您很有可能得不到正确的结果
在我的例子中,我使用了下面的代码
self.someCollectionViewController?.collectionView.reloadData()
self.someCollectionViewController?.collectionView.layoutIfNeeded()
if let height = self.someCollectionViewController?.collectionViewLayout.collectionViewContentSize.height {
self.someProductCollectionViewHeightConstraints?.constant = height
}
就我而言,我的内容大小总是为零。layoutIfNeeded()对我来说不够,我必须在DispatchQueue.main.async ie中获取内容大小
self.collectionView.layoutIfNeeded()
DispatchQueue.main.async {
print(self.collectionView.contentSize)
}
我肯定这和自动布局有关。。试着禁用itAlready disabled,这也是我想到的第一件事。似乎加载视图的速度不够快,因为在重新显示时宽度是正确的(例如,当返回到同一视图时)。您是否找到过这个问题的答案?这里也是同样的问题。有什么评论吗?还没有,还没有在新版iOS上试用过。你救了我的命我非常感谢你@ucangetitI发现我的collectionView.contentSize.height大于contentOffset.y
的最大结果,即使使用[self.collectionView LayoutFneed]
。这对我不起作用。我使用的是layout.estimatedItemSize=CGSize(宽度:1,高度:1)
,即使在调用self.collectionView之后,它也会返回1,1。layoutIfNeeded@osrl确保将estimatedItemSize
设置为接近单元格的实际大小。此属性只是系统调整单元格大小的起点,如果您的单元格大小完全不同,那么最好从最小单元格IMHO的大小开始。