UICollectionView不显示所有项目

问题描述 投票:1回答:4

我使用MVVMCross在Xamarin.iOs中开发,将ObservableCollection数据绑定到MvxCollectionViewSource,项目显示在UICollectionView中。将项目设置为ObservableCollection时,并非所有项目都显示在UICollectionView中。例如,如果我将10个项目设置到集合视图中,则只显示其中的7个项目。知道为什么会这样吗?

ios xamarin.ios mvvmcross
4个回答
4
投票

我在iOS 8.0中遇到了同样的问题,但在iOS 9.0中没有,@ JordiVilaplana的回答给了我一个关于解决方案的提示。

问题似乎是estimatedItemSizeUICollectionViewController属性。删除该行解决了问题。

实际上,只有在动态计算单元格高度时,该属性才有用,如文档所述:

当细胞动态调整其大小时,提供估计的细胞大小可以改善集合视图的性能。通过指定估计值,集合视图可以推迟确定其内容实际大小所需的一些计算。具体而言,假设不在屏幕上的单元格是估计的高度。

否则,如果您的单元格大小相同,请参考文档建议:

如果所有单元格的高度相同,请使用itemSize属性而不是此属性来指定单元格大小。

并避免这个问题:)


1
投票

我最近遇到了这个问题,我发现当我将estimatedItemSize设置为UICollectionViewFlowLayoutAutomaticSize时会发生这种情况,如果我将其更改为随机的非零大小,即CGSize(width: 1, height: 1),那么问题就解决了,我仍然可以保持自我调整大小的UICollectionViewCell。


0
投票

终于明白了,如果你仍然坚持下去,希望它可以帮到你。

如果您已在代码中将EstimatedItemSize设置为UICollectionView.CollectionViewLayout,请不要删除该行。

至少,它对我有用。

祝你好运! :)


0
投票

如果您使用UICollectionViewFlowLayout初始化UICollectionView,那么有一种很好的方法:

  UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
  layout.estimatedItemSize = CGSizeMake(1, 1);
  layout.itemSize = UICollectionViewFlowLayoutAutomaticSize;
  self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
© www.soinside.com 2019 - 2024. All rights reserved.