首次加载时UICollectionView错误的contentSize,之后更正

kla*_*nza 24 objective-c uicollectionview uicollectionviewlayout

我有一个常见的UICollectionView与分页和所有.

仍然试图找出viewDidLoad:,viewWillAppear:和viewDidAppear:上的原因,仅在第一次视图调用时,我在调用myCollectionView.collectionView.contentSize.width时得到了错误的大小.它始终以0宽度响应(高度总是正确的).连续重新加载视图让我得到正确的视图.

求助于使用

self.collectionView.collectionViewLayout.collectionViewContentSize
Run Code Online (Sandbox Code Playgroud)

在第一次加载时给我正确的宽度事件.

对我来说还是一个谜.

uca*_*tit 54

所以我看到一个类似的问题,其中contentSize宽度始终为零.简单的答案是......在collectionView中可能还没有内容.这就是它的内容大小为零的原因.

我也注意到有时在调用invalidateLayout我的UICollectionView之后,我发现它self.collectionView.collectionViewLayout.collectionViewContentSize 与我的不一样self.collectionView.contentSize.

经过多次搜索,我在这篇SO帖子中找到了一个很好的暗示

我需要做的就是两contentSize计算是相同的是调用[self.collectionView layoutIfNeeded]呼叫后立即[self.collectionView reloadData][self.collectionView.collectionViewLayout invalidateLayout].

这实质上迫使重新加载立即发生,而不是在下一个runloop循环中发生.

我真的希望这能解决你的问题.

  • 这对我不起作用。我正在使用 `layout.estimatedItemSize = CGSize(width: 1, height: 1)` 并且即使在调用 self.collectionView.layoutIfNeeded 之后它也会返回 1, 1 (2认同)