Xamarin:在开始时列出视图单元格的高度

时间:2018-11-16 10:28:47

标签: listview xamarin

使用listView,我正在尝试(仅在iOS上)动态单元格显示为不好的开始。单元是图像和文本的混合,并且在第一次执行时,文本和图像是混合的。 然后,在滚动后调整大小。

我的代码是:

<ListView x:Name="MyListView"  HasUnevenRows="true" IsVisible="false">
                    <ListView.ItemTemplate>
                        <DataTemplate>

                             <ViewCell>
                                <StackLayout Spacing="6" Margin="16">

                                    <Image   Aspect="AspectFill">
                                        <Image.Source>
                                          <UriImageSource Uri="{Binding Imagen}"/>
                                        </Image.Source>
                                    </Image>   

                                    <Label  Style="{StaticResource Noticia}" Font="11" Text="{Binding Fecha, StringFormat='{0:dd/MM/yyyy}'}"/>
                                    <Label  Style="{StaticResource Titular}" Text="{Binding Titular}" />
                                 </StackLayout>
                            </ViewCell>


                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>       

如何解决?

1 个答案:

答案 0 :(得分:1)

查看您的代码,您正在要求图像填充未定义高度的堆栈布局。可以说这里的解决方案是手动定义高度。当您的图像都高度为100高度时很容易。

但是,如果您想获得动态图像高度,请让我欢迎您进入有限的xamarin列表视图世界,并提出几种解决方案。

  1. 响应图像加载事件(如果您正在使用ffimageloading插件,则可能肯定有一个-Success)获取接收到的图像原始宽度/高度,并根据当前列表视图按比例计算所需的heightrequest宽度。

                double ratio = item.ImageHeight / item.ImageWidth;
                item.ImageDynamicHeight = ratio * basewidth;  //basewidth can be YourListView.Width, remember to check if it's not -1
    
  2. 更有趣的是:您的服务器api必须在传递的数据中包含图像原始的高度/宽度信息,您将根据此信息设置heightrequest,然后图像在下载时将完美落在内部。使用此解决方案来处理新闻提要列表,服务器将新闻图片的高度以及新闻文本传递给我。

  3. 如果您没有很多消耗内存的行,则可以让您使用自定义控件,该控件由具有可绑定Source属性的stacklayout组成,您的单元格成为该stacklayout的子级,在视觉上将表现为比标准xamarin.forms listview更像它应该平滑。将此解决方案用于菜单列表,简短产品列表等。