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