我已经获得了TagInstances'每个都包含一个颜色'字符串值。
List<TagInstance> tags
在我的UICollectionView中,我想放弃tagCells的初始化,如果:
tags[index.Path].color = "undefined"
我试图在&#34; cellForItemAtIndexPath&#34; /&#34; GetCell&#34;方法:
[Export("collectionView:cellForItemAtIndexPath:")]
public UICollectionViewCell GetCell(UICollectionView collectionView, NSIndexPath indexPath)
{
var cell = (TagCell)collectionView.DequeueReusableCell("tagCell", indexPath);
var thisTag = tags[indexPath.Row];
if (thisTag.color == "undefined") { /* todo: Skip over this cell somehow */ }
try
{
var color = UIColor.Clear.FromHex(thisTag.color);
cell.SetUIWithData(color, thisTag.abbreviation);
cell.AddBorderAndShadow();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"\ncolor : { thisTag.color }\nThrows an exception : \n{ ex }\n");
}
return cell;
}
目前我的集合视图显示有任何TagInstance具有未定义颜色的间隙。我希望这个系列没有那个差距。这可能吗?
答案 0 :(得分:3)
正如rmaddy和SushiHangover所说,正确的方法是拥有正确的数据源,只有你想要显示的项目。
在某种程度上,替代方法是将这些不需要的单元格调整为宽度/高度= 0.要使用UICollectionView,必须从UICollectionViewFlowLayout派生并覆盖LayoutAttributesForElementsInRect
方法然后返回Size = CGSize.Empty
对于那些你不想看的元素。
请参阅Xamarin Docs in Introduction to UICollectionView中的子类化UICollectionViewFlowLayout 部分。
同样,正确而简单的方法是在数据源级别过滤元素,如SushiHangover和rmaddy所建议。
答案 1 :(得分:1)
1)从您不想在collectionview中显示单元格的数据源中删除该数据。
tags.RemoveAll(p => p.color== "undefined" );
或强>
2)如果由于其他原因想要将该数据保留在列表中,请使用UICollectionViewDelegateFlowLayout的GetSizeForItem方法。
在UICollectionviewSource中使用以下
[Export ("collectionView:layout:sizeForItemAtIndexPath:"), CompilerGenerated]
public virtual CGSize GetSizeForItem (UICollectionView collectionView, UICollectionViewLayout layout, NSIndexPath indexPath)
{
var thisTag = tags[indexPath.Row];
if (thisTag.color == "undefined")
return new CGSize(0,0);
else
return new CGSize (yoruwidth, yourheigh);
}