【问题标题】:Xamarin.Forms: CarouselView not works as expected on iOSXamarin.Forms:CarouselView 在 iOS 上无法按预期工作
【发布时间】:2021-08-13 13:27:23
【问题描述】:

我正在尝试使用水平滚动来实现 CarouselView 控件。 我正在使用 Xamarin.Forms 5.0.0.2012。

这是 xaml 代码:

 <CarouselView x:Name="carViewArticoliAlt" 
                              Loop="False"
                              ItemsSource="{Binding ListaProdottiAlt}"
                              IndicatorView="indicatorView"
                              IsVisible="{Binding ArticoliAlt}"                                 
                              HeightRequest="200"
                              PeekAreaInsets="100">
                    
                    <CarouselView.ItemsLayout>
                        <LinearItemsLayout Orientation="Horizontal"  
                                           SnapPointsAlignment="Start" 
                                           SnapPointsType="Mandatory"
                                           ItemSpacing="20" />
                    </CarouselView.ItemsLayout>
                   
                    <CarouselView.ItemTemplate>
                        <DataTemplate>
                            <Frame HasShadow="True" BorderColor="LightGray"                                        
                                   CornerRadius="5" Padding="5"
                                   HeightRequest="310"
                                   HorizontalOptions="Center"
                                   VerticalOptions="CenterAndExpand" >
                                
                                <Frame.GestureRecognizers>
                                    <TapGestureRecognizer         
                                        Tapped="TapGestureRecognizer_Tapped"/>
                                </Frame.GestureRecognizers>

                                <Grid>
                                    <StackLayout x:Name="stkArticoloAlt">
                                        <ImageButton x:Name="ImageArt" 
                                                     Source="{Binding ImageArt}" 
                                                     Aspect="AspectFit"
                                                     HeightRequest="80"
                                                     Clicked="ImageArt_Clicked"
                                                     BackgroundColor="White"/>

                                        <Label Text="{Binding Descrizione}"
                                               Style="{StaticResource labelDescrizioneStyle}"
                                               MaxLines="3" LineBreakMode="TailTruncation"
                                               HeightRequest="55"
                                               FontSize="15"/>

                                        </StackLayout>
                                    </StackLayout>
                                </Grid>
                            </Frame>
                        </DataTemplate>
                    </CarouselView.ItemTemplate>
                </CarouselView>

                <IndicatorView x:Name="indicatorView"
                            IndicatorColor="LightGray"
                            SelectedIndicatorColor="DarkGray"
                            HorizontalOptions="Center" /> 

在 Android 平台上控件渲染良好,但在 iOS 上抛出以下异常:Objective-C 异常抛出。名称:NSInternalInconsistencyException 原因:流布局中不支持负尺寸。 我遵循了本教程: https://docs.microsoft.com/it-it/xamarin/xamarin-forms/user-interface/carouselview/scrolling

我注意到异常的原因是 PeekAreaInsets 属性。事实上,如果我不处理此属性,则不会发生异常。但是,控件未正确绘制,因为选项卡重叠。 Android 代码继续正常运行。

如图所示,卡片都是重叠的,即使 LinearItemsLayout.Orientation 设置为水平。

【问题讨论】:

    标签: ios xaml xamarin.forms


    【解决方案1】:

    名称:NSInternalInconsistencyException 原因:流布局中不支持负尺寸。

    错误表明子布局的大小(在数据模板中)大于父布局的大小。

     <CarouselView x:Name="carViewArticoliAlt" 
                                  Loop="False"
                                  ItemsSource="{Binding ListaProdottiAlt}"
                                  IndicatorView="indicatorView"
                                  IsVisible="{Binding ArticoliAlt}"                                 
                                  HeightRequest="200"   --------->parent's height
                                  PeekAreaInsets="100">
                        
                        <CarouselView.ItemsLayout>
                            <LinearItemsLayout Orientation="Horizontal"  
                                               SnapPointsAlignment="Start" 
                                               SnapPointsType="Mandatory"
                                               ItemSpacing="20" />
                        </CarouselView.ItemsLayout>
                       
                        <CarouselView.ItemTemplate>
                            <DataTemplate>
                                <Frame HasShadow="True" BorderColor="LightGray"                                        
                                       CornerRadius="5" Padding="5"
                                       HeightRequest="310"  --------->child's height
                                       HorizontalOptions="Center"
                                       VerticalOptions="CenterAndExpand" >
    

    要解决此问题,请尝试删除 CarouselView 上的 HeightRequest="200"

    【讨论】:

      【解决方案2】:

      自 Xamarin.Forms 5 发布以来,已在 CarouselView 上实现了一项新功能:Loop。这似乎默认设置为 True 并且与 PeakAreaInsets 属性一起导致了一些问题。通过设置Loop="False",我能够解决/解决上述崩溃/错误。也许这也适用于您的情况?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-15
        • 2014-10-20
        • 2013-05-27
        • 1970-01-01
        相关资源
        最近更新 更多