我使用MVVMCross在Xamarin.iOs中开发,将ObservableCollection数据绑定到MvxCollectionViewSource,项目显示在UICollectionView中。将项目设置为ObservableCollection时,并非所有项目都显示在UICollectionView中。例如,如果我将10个项目设置到集合视图中,则只显示其中的7个项目。知道为什么会这样吗?
我在iOS 8.0中遇到了同样的问题,但在iOS 9.0中没有,@ JordiVilaplana的回答给了我一个关于解决方案的提示。
问题似乎是estimatedItemSize
的UICollectionViewController
属性。删除该行解决了问题。
实际上,只有在动态计算单元格高度时,该属性才有用,如文档所述:
当细胞动态调整其大小时,提供估计的细胞大小可以改善集合视图的性能。通过指定估计值,集合视图可以推迟确定其内容实际大小所需的一些计算。具体而言,假设不在屏幕上的单元格是估计的高度。
否则,如果您的单元格大小相同,请参考文档建议:
如果所有单元格的高度相同,请使用itemSize属性而不是此属性来指定单元格大小。
并避免这个问题:)
我最近遇到了这个问题,我发现当我将estimatedItemSize
设置为UICollectionViewFlowLayoutAutomaticSize
时会发生这种情况,如果我将其更改为随机的非零大小,即CGSize(width: 1, height: 1)
,那么问题就解决了,我仍然可以保持自我调整大小的UICollectionViewCell。
终于明白了,如果你仍然坚持下去,希望它可以帮到你。
如果您已在代码中将EstimatedItemSize
设置为UICollectionView.CollectionViewLayout
,请不要删除该行。
至少,它对我有用。
祝你好运! :)
如果您使用UICollectionViewFlowLayout初始化UICollectionView,那么有一种很好的方法:
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.estimatedItemSize = CGSizeMake(1, 1);
layout.itemSize = UICollectionViewFlowLayoutAutomaticSize;
self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];