小编Dan*_*ser的帖子

UICollectionView重复显示并乱序显示项目

我已经为UICollectionView构建了一个自定义渲染器。

我遇到了一个问题,但我没有足够的解决办法了,就在这里。

每当用户滚动UICollectionView时,屏幕上将显示的下一个项目就会无序显示并重复显示。

您可以在GitHub上找到我的代码:https : //github.com/DanielCauser/XamarinHorizo​​ntalList

此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)

custom-renderer xamarin.ios ios xamarin uicollectionview

3
推荐指数
1
解决办法
505
查看次数