使用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>
如何解决?
答案 0 :(得分:1)
查看您的代码,您正在要求图像填充未定义高度的堆栈布局。可以说这里的解决方案是手动定义高度。当您的图像都高度为100高度时很容易。
但是,如果您想获得动态图像高度,请让我欢迎您进入有限的xamarin列表视图世界,并提出几种解决方案。
响应图像加载事件(如果您正在使用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
更有趣的是:您的服务器api必须在传递的数据中包含图像原始的高度/宽度信息,您将根据此信息设置heightrequest,然后图像在下载时将完美落在内部。使用此解决方案来处理新闻提要列表,服务器将新闻图片的高度以及新闻文本传递给我。
如果您没有很多消耗内存的行,则可以让您使用自定义控件,该控件由具有可绑定Source
属性的stacklayout组成,您的单元格成为该stacklayout的子级,在视觉上将表现为比标准xamarin.forms listview更像它应该平滑。将此解决方案用于菜单列表,简短产品列表等。