gpt4 book ai didi

ios - 防止可见 UICollectionView 单元格闪烁

转载 作者:行者123 更新时间:2023-11-29 00:45:44 25 4
gpt4 key购买 nike

我正在使用无限滚动的 UICollectionView,它绑定(bind)到 ViewModel 中的自定义 ObservableCollection。该单元格只有一个 UITextView,它与模型对象中的字符串属性进行数据绑定(bind)。

当我开始向下滚动时,我通过调用 OservableCollection 上的 AddRange 来显示更多项目。

public class MyCollection<T> : ObservableCollection<T>
{
public MyCollection()
: base()
{
}

public MyCollection(IEnumerable<T> collection)
: base(collection)
{
}

public MyCollection(List<T> list)
: base(list)
{
}

public void AddRange(IEnumerable<T> range)
{
foreach (var item in range)
{
Items.Add(item);
}

var dispatcher = Mvx.Resolve<IMvxMainThreadDispatcher>();
dispatcher.RequestMainThreadAction(() =>
{
this.OnPropertyChanged(new PropertyChangedEventArgs("Count"));
this.OnPropertyChanged(new PropertyChangedEventArgs("Item[]"));
this.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, range));
});
}
}

新项目已成功添加,但是一旦 Collection View 从通知更改事件中重新加载,可见的单元格项目可能会闪烁并瞬间显示错误的数据。当向 UICollectionView 加载更多数据时,是否可以防止可见单元格的闪烁?

最佳答案

您可以创建 IndexPath[] 数组以传递到 collectionView.ReloadItems(indexPaths[]) 中:

public void AddRange(IEnumerable<T> range)
{
...
...
...

var originalCount = Count;

foreach (var item in range)
{
Items.Add(item);
}

List<NSIndexPath> reloadPaths = new List<NSIndexPath>();
for (int i = originalCount; i < Count-1; i++) {
reloadPaths.Add(NSIndexPath.FromRowSection(i, 0));
}

...
...
...
}

然后就可以执行collectionView.ReloadItems(reloadPaths.ToArray())

关于ios - 防止可见 UICollectionView 单元格闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38623949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com