我已经为UICollectionView构建了一个自定义渲染器。
我遇到了一个问题,但我没有足够的解决办法了,就在这里。
每当用户滚动UICollectionView时,屏幕上将显示的下一个项目就会无序显示并重复显示。
您可以在GitHub上找到我的代码:https : //github.com/DanielCauser/XamarinHorizontalList
此gif完全显示了问题所在,某些列表项出现了多次且顺序混乱。
我认为这是由于竞争状况造成的,在这种情况下,操作系统只是将数据加载到该帧中可用的视单元中。
这是我在Xamarin.Forms中的视图:
<local:HorizontalViewNative ItemsSource="{Binding Monkeys}"
Grid.Row="5"
VerticalOptions="Start"
ItemHeight="100"
ItemWidth="100">
<local:HorizontalViewNative.ItemTemplate>
<DataTemplate>
<ViewCell>
<ContentView>
<StackLayout WidthRequest="100"
HeightRequest="100">
<Image Source="{Binding Image}" />
<Label Text="{Binding Name}"
LineBreakMode="MiddleTruncation"
HorizontalTextAlignment="Center"
VerticalTextAlignment="Center"/>
</StackLayout>
</ContentView>
</ViewCell>
</DataTemplate>
</local:HorizontalViewNative.ItemTemplate>
</local:HorizontalViewNative>
Run Code Online (Sandbox Code Playgroud)
这是Xamarin.Forms项目中的My自定义控件:
public class HorizontalViewNative : View
{
public static readonly BindableProperty ItemsSourceProperty =
BindableProperty.Create("ItemsSource", typeof(IEnumerable), typeof(HorizontalViewNative), default(IEnumerable<object>), BindingMode.TwoWay, propertyChanged: ItemsSourceChanged);
public static readonly BindableProperty ItemTemplateProperty =
BindableProperty.Create("ItemTemplate", typeof(DataTemplate), typeof(HVScrollGridView), default(DataTemplate));
public static readonly BindableProperty ItemHeightProperty =
BindableProperty.Create("ItemHeight", typeof(int), typeof(HVScrollGridView), default(int)); …Run Code Online (Sandbox Code Playgroud)