我已经看过几次这个话题但是现在当我需要它时,我找不到它...我的应用程序中有一些ListView的问题。 ListViews显示来自数据库和Web服务的内容。 ListView的内容可能非常大,有时文本被切断......
到目前为止,这是我的ListView:
<ListView Grid.Row="1" x:Name="DataListView" ItemsSource="{Binding GroupData}" GroupShortNameBinding="{Binding ShortCategory}" CachingStrategy="RecycleElement"
IsGroupingEnabled="True" HasUnevenRows="True" BackgroundColor="#b99f65" SeparatorColor="#55492e" ItemTapped="ListView_OnItemTapped" Margin="0,3,0,0">
<ListView.GroupHeaderTemplate>
<DataTemplate>
<ViewCell>
<Grid BackgroundColor="#120305" Margin="0">
<StackLayout Orientation="Horizontal" VerticalOptions="Center" Margin="15,0">
<Label Text="{Binding Category}" TextColor="#b99f65" FontSize="18" FontAttributes="Bold" />
<Label Text="{Binding ShortCategory, StringFormat='({0})'}" FontSize="18" TextColor="#b99f65" />
</StackLayout>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.GroupHeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Vertical" Margin="10,5" VerticalOptions="Fill">
<Label Text="{Binding Name}" FontSize="14" FontAttributes="Bold" Margin="0" />
<Label Text="{Binding Effect}" FontSize="11" LineBreakMode="WordWrap" Margin="0" />
<Label Text="{Binding Ingredients, StringFormat='Ingredients: {0}'}" FontSize="11" LineBreakMode="WordWrap" Margin="0,3,0,0" SizeChanged="OnLabelSizeChanged" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
此处,在某些设备尺寸的iOS中会切断配料。我已经为最后一个Label实现了一个SizeChanged-Event,以查看是否正确设置了大小。这是输出:
[0:] LABEL HEIGHT CHANGED:: 26.5
[0:] LABEL HEIGHT CHANGED:: 26.5
[0:] LABEL HEIGHT CHANGED:: 13.5
[0:] LABEL HEIGHT CHANGED:: 13.5
[0:] LABEL HEIGHT CHANGED:: 26.5
[0:] LABEL HEIGHT CHANGED:: 13.5
[0:] LABEL HEIGHT CHANGED:: 26.5
[0:] LABEL HEIGHT CHANGED:: 13.5
[0:] LABEL HEIGHT CHANGED:: 26.5
[0:] LABEL HEIGHT CHANGED:: 13.5
任何“26.5”高度标签都被切成两半。因为这只发生在iOS上,它必定是一个问题。有人可以帮我解决这个问题吗?我在我的应用程序的其他地方也遇到了同样的问题,但还没有找到可行的解决方案...我知道我可以将RowHeight设置为最大可能值但是为此我需要知道文本的次数是多少次包装,这不是一个很好的解决方案...我想使用动态尺寸...
作为一种解决方法,我目前在iOS的最后一个标签上使用它,但它需要大量的性能并且看起来非常糟糕......
private void OnLabelSizeChanged(object sender, EventArgs e)
{
var stackLayout = (sender as Label)?.Parent as StackLayout;
if (stackLayout != null)
{
var childrenHeight = stackLayout.Children.Sum(c => c.Height) + stackLayout.Children.Count * stackLayout.Spacing;
stackLayout.HeightRequest = childrenHeight;
var viewCell = stackLayout.Parent as ViewCell;
viewCell?.ForceUpdateSize();
}
}
除了失去的性能之外,如果设备方向发生变化,它也会使应用看起来错误。