更新UICollectionViewFlowLayout而不创建新的UICollectionView?

时间:2018-05-20 21:51:41

标签: ios swift xamarin xamarin.ios

我想更新某些UICollectionViewFlowLayout或UICollectionView,因为我想将单元格的大小设置为需要计算的特定数字(screenwidth / 3) - 2。 但是,我只知道如何通过创建一个新实例来分配它,这将重置许多属性并迫使我重新定义它们。这可以在其他地方更新吗?或者有更好的方法来更新ItemSize?

UICollectionViewFlowLayout layout = new UICollectionViewFlowLayout
{
      SectionInset = new UIEdgeInsets(0, 0, 0, 0),
      MinimumInteritemSpacing = 2,
      MinimumLineSpacing = 2,
      ItemSize = new SizeF(Size, Size),
      ScrollDirection = UICollectionViewScrollDirection.Vertical,
};
ProfilesListView = new UICollectionView(ProfilesListView.Frame, layout);

1 个答案:

答案 0 :(得分:1)

当您想要设置项目的大小时,无需再次初始化UICollectionViewFlowLayout。您可以使用UICollectionViewDelegateFlowLayout以编程方式修改大小:

public class MyCollectionDelegate : UICollectionViewDelegateFlowLayout
{
    public override CGSize GetSizeForItem(UICollectionView collectionView, UICollectionViewLayout layout, NSIndexPath indexPath)
    {
        return new CGSize(Size, Size);
    }
}

将此委托设置为您的UICollectionView:ProfilesListView.Delegate = new MyCollectionDelegate();

您可以通过更改事件GetSizeForItem()并强制更新UICollectionView ProfilesListView.ReloadData();

来修改它