我有一个集合视图,需要让单元格符合内容大小。
我使用sizeForItemAtIndexPath:
来设置每个单元格的大小。
它被解雇并且效果很好。
这是我面临的问题。 集合视图的数据列表是动态更改的。
在这种情况下,集合视图不会以正确的单元格大小显示它。它以 size1 显示
我想以自己的大小显示下一个项目,但集合视图保持原始大小。
更改项目计数后,将再次触发sizeForItemAtIndexPath:
。
当项目计数相同时,它不会被触发。
我希望每次都被解雇。
我分享了一些代码。
cllSelected.Source = new SelectedItemSource(this, _selectedItems);
只要有新的_selectedItems
我实施了UICollectionViewSource
,如下所示
public class SelectedItemSource : UICollectionViewSource, IUICollectionViewDelegateFlowLayout
{
CatalogVC _ownerVC;
SelectedCategoryList _selectedItems;
public SelectedItemSource(CatalogVC ownerVC, SelectedCategoryList selectedItems)
{
_ownerVC = ownerVC;
_selectedItems = selectedItems;
}
public override nint NumberOfSections(UICollectionView collectionView)
{
return 1;
}
public override nint GetItemsCount(UICollectionView collectionView, nint section)
{
return _selectedItems != null ? _selectedItems.Count : 0;
}
public override bool ShouldHighlightItem(UICollectionView collectionView, Foundation.NSIndexPath indexPath)
{
return true;
}
public override void ItemHighlighted(UICollectionView collectionView, Foundation.NSIndexPath indexPath)
{
}
public override void ItemUnhighlighted(UICollectionView collectionView, Foundation.NSIndexPath indexPath)
{
_ownerVC.SelectedFilter_ItemClick(indexPath.Row);
}
public override UICollectionViewCell GetCell(UICollectionView collectionView, Foundation.NSIndexPath indexPath)
{
SelectedFilterCollectionCell cell = collectionView.DequeueReusableCell("SelectedFilterCollectionCell", indexPath) as SelectedFilterCollectionCell;
cell.Layer.ShouldRasterize = true;
cell.Layer.RasterizationScale = UIScreen.MainScreen.Scale;
cell.BindDataToCell(_selectedItems[indexPath.Row]);
return cell;
}
[Export("collectionView:layout:sizeForItemAtIndexPath:")]
public CoreGraphics.CGSize GetSizeForItem(UICollectionView collectionView, UICollectionViewLayout layout, Foundation.NSIndexPath indexPath)
{
var text = new NSString(_selectedItems[indexPath.Row].Text);
CGSize cellSize = new CGSize(xxx, yyy); // cellSize will be determined according to text
return cellSize;
}
}
感谢任何解决方案或建议!
答案 0 :(得分:0)
尝试在数据更改后调用CollectionView.ReloadData()
。
我认为它会调用委托中包含的方法。