我的情况是:
问题是:
=>预期:我不希望它在那一刻显示空白页。
这是我的代码:
public class CarouselWebTouch
: UIView,
IUICollectionViewSource,
IUICollectionViewDelegateFlowLayout,
ICarouselWebTouch
{
const string DAY_CELL_ID = "webCellId";
IList<PageItem> Pages = new List<PageItem>();
UICollectionView CollectionView;
Dictionary<int, CarouselWebCell> CacheWebCell = new Dictionary<int, CarouselWebCell>();
...
public CarouselWebTouch()
{
var layout = new UICollectionViewFlowLayout();
layout.MinimumLineSpacing = 0;
layout.MinimumInteritemSpacing = 0;
layout.ScrollDirection = UICollectionViewScrollDirection.Horizontal;
layout.SectionInset = UIEdgeInsets.Zero;
layout.HeaderReferenceSize = CGSize.Empty;
layout.FooterReferenceSize = CGSize.Empty;
CollectionView = new UICollectionView(CGRect.Empty, layout);
CollectionView.AllowsSelection = true;
CollectionView.BackgroundColor = UIColor.Clear;
CollectionView.PagingEnabled = true;
CollectionView.Delegate = this;
CollectionView.DataSource = this;
CollectionView.ShowsHorizontalScrollIndicator = false;
CollectionView.RegisterClassForCell(typeof(CarouselWebCell), DAY_CELL_ID);
Add(CollectionView);
}
public UICollectionViewCell GetCell(UICollectionView collectionView, NSIndexPath indexPath)
{
var reusableCell = (CarouselWebCell)collectionView.DequeueReusableCell(DAY_CELL_ID, indexPath);
return reusableCell;
}
}
在第0节的第一次初始加载中调用函数GetCell。我想生成上一个和下一个的单元格。 (也是第1节)。
有没有办法强制它在初始加载短语中产生多少个单元?
答案 0 :(得分:4)
UICollectionViewDataSourcePrefetching
提供集合视图数据要求的预先警告的协议,允许触发异步数据加载操作。
您可以在现有的基于IUICollectionViewDataSourcePrefetching
的类上实现NSObject
接口(我在我的集合视图数据源上执行)并将其分配给PrefetchDataSource
属性:
CollectionView.PrefetchDataSource = this;
CollectionView.PrefetchingEnabled = true;
注意:如果您设置PrefetchingEnabled
,则无需将PrefetchDataSource
设置为true,但您可以打开/关闭它,因此您需要暂时关闭预取。< / p>
您有一个必需的方法(PrefetchItems
)和一个可选的(CancelPrefetching
)和我强烈推荐您已阅读 Apple文档所以你了解何时调用这些方法(不一定要为每个单元调用它们)
public void PrefetchItems(UICollectionView collectionView, NSIndexPath[] indexPaths)
{
foreach (var prefetch in indexPaths)
{
Console.WriteLine($"PreFetch {prefetch.LongRow}");
}
}
[Export("collectionView:cancelPrefetchingForItemsAtIndexPaths:")]
public void CancelPrefetching(UICollectionView collectionView, NSIndexPath[] indexPaths)
{
foreach (var prefetch in indexPaths)
{
Console.WriteLine($"Cancel PreFetch {prefetch.LongRow}");
}
}
注意:由于CancelPrefetching
在Xamarin / C#界面中是可选的,因此您需要Export
,否则UICollectionView
将不会看到它已实现而不会调用它。< / p>
Apple Doc:UICollectionViewDataSourcePrefetching