当 UICollectionViewFlowLayout.PrepareLayout() 时,Xamarin iOS 应用程序在 Monitor 中暂停

Xamarin iOS Application suspended in Monitor when UICollectionViewFlowLayout.PrepareLayout()

Xamarin iOS 应用程序在 CollectionView.IsVisible = false 启动时无限挂起。

在 Android 上,有效。但是,在 iOS 上,设置 CollectionView.IsVisible = false 导致应用程序冻结。

    <StackLayout
        Margin="0,20,0,0">

        <Button
            HorizontalOptions="CenterAndExpand"
            WidthRequest="100"
            Clicked="Button_Clicked"
            Text="Click Me"/>

        <CollectionView
            x:Name="Collection"
            VerticalOptions="FillAndExpand"
            ItemsSource="{Binding Items}"
            SelectionMode="Single"
            IsVisible="False">

            <CollectionView.ItemsLayout>
                <GridItemsLayout
                    Orientation="Vertical"
                    Span="4"/>
            </CollectionView.ItemsLayout>
                                    
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <StackLayout
                        Margin="10,10,10,10">
                        <Image
                            WidthRequest="50"
                            HeightRequest="50"
                            Source="{local:ImageResource CollectionView.Image.png}"/>
                        <Label
                            Text="{Binding Title}"
                            HorizontalTextAlignment="Center"
                            VerticalTextAlignment="Center" />
                    </StackLayout>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
    </StackLayout>

这里是reproducible project

有一个 解决方法 可以解决 iOS 的这个问题,您可以在之后设置 CollectionViewVisiable布局已初始化。

例如从Xaml中去掉IsVisible="False",然后在ContentPage.cs中设置在 OnAppearing 方法中:

protected override void OnAppearing()
{
    base.OnAppearing();
    Collection.IsVisible = false;
}

效果: