UICollectionView不显示所有项目

时间:2015-02-20 15:07:42

标签: ios xamarin.ios mvvmcross

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

5 个答案:

答案 0 :(得分:4)

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

问题似乎是estimatedItemSize的{​​{1}}属性。 删除该行解决了问题。

事实上,如果单元格高度是动态计算的,那么该属性才有用,如文档中所述:

  

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

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

  

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

避免这个问题:)

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

如果您已在代码中将EstimatedItemSize设置为UICollectionView.CollectionViewLayout,只需 DON' T ,请删除该行。

至少,它对我有用。

祝你好运! :)

答案 3 :(得分:0)

如果要使用UICollectionViewFlowLayout初始化UICollectionView,这是一种不错的方法:

  UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
  layout.estimatedItemSize = CGSizeMake(1, 1);
  layout.itemSize = UICollectionViewFlowLayoutAutomaticSize;
  self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];

答案 4 :(得分:0)

override func viewDidLoad() {
    super.viewDidLoad()
    if let collFlowLayout = self.mycollecton.collectionViewLayout as? UICollectionViewFlowLayout {
        collFlowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
    }
}

extension ViewController: UICollectionViewDelegateFlowLayout{
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
        return CGSize(width: 1, height: 1)
    }
}