ListView中的多行文本(文本末尾截止)

时间:2017-04-19 16:58:53

标签: ios listview xamarin.ios xamarin.forms

我已经看过几次这个话题但是现在当我需要它时,我找不到它...我的应用程序中有一些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();
    }
}

除了失去的性能之外,如果设备方向发生变化,它也会使应用看起来错误。

0 个答案:

没有答案