Xamarin.Forms: 计算列表视图高度错误?

Xamarin.Forms: calculating listview height wrong?

为什么底部的标签只显示了一半的文字?

这是我的xaml。 listview区域为300,每个listview行为100(设置在<On Platform="Android">100</On>)。

每个ViewCell有4行,每行25行,共100行(listview行高)。

所以我不明白为什么只显示底部一半的文字,或者为什么第2列第0行和第1行所占的space不正好是总高度的一半.

<Grid RowSpacing="0">
    <Grid.RowDefinitions>
        <RowDefinition Height="100" />
        <RowDefinition Height="300" />
    </Grid.RowDefinitions>
    <StackLayout Grid.Row="0" x:Name="MapGrid">
        <maps:Map WidthRequest="960" HeightRequest="100" 
              x:Name="MyMap" IsShowingUser="true"/>
    </StackLayout>
    <StackLayout Grid.Row="1" x:Name="listSection" HeightRequest="300">
        <ListView x:Name="ListView_Pets">
            <ListView.RowHeight>
                <OnPlatform x:TypeArguments="x:Int32">
                    <On Platform="Android">100</On>
                </OnPlatform>
            </ListView.RowHeight>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="25"></RowDefinition>
                                <RowDefinition Height="25"></RowDefinition>
                                <RowDefinition Height="25"></RowDefinition>
                                <RowDefinition Height="25"></RowDefinition>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="50*" />
                                <ColumnDefinition Width="25*"/>
                                <ColumnDefinition Width="25*"/>
                            </Grid.ColumnDefinitions>
                            <Label Text="Name" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" FontSize="15" TextColor="Black" Grid.Row="0" Grid.Column="0"/>
                            <Label Text="Address" HorizontalTextAlignment="Center" VerticalTextAlignment="Start" FontSize="10" TextColor="Black" Grid.Row="1" Grid.Column="0"/>
                            <Label Text="Price1" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" FontSize="15" TextColor="White" BackgroundColor="#2FA4D9" Grid.Row="0" Grid.Column="2"/>
                            <Label Text="Price2" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" FontSize="15" TextColor="White" BackgroundColor="#2FA4D9" Grid.Row="1" Grid.Column="2"/>
                            <Label Text="Tag1" Grid.Row="0" VerticalTextAlignment="Center" HorizontalTextAlignment="End" Grid.Column="1" FontSize="Micro"/>
                            <Label Text="Tag2" Grid.Row="1" VerticalTextAlignment="Center" HorizontalTextAlignment="End" Grid.Column="1" FontSize="Micro"/>
                            <StackLayout Grid.Row="3" Grid.Column="0">
                                <StackLayout Orientation="Horizontal" >
                                    <Label Text="Text1" FontSize="10" VerticalTextAlignment="Start" TextColor="Black" />
                                    <Label Text="Text2" VerticalTextAlignment="Start" FontSize="10" TextColor="Black" />
                                    <Label Text="Text3" VerticalTextAlignment="Start" FontSize="10" TextColor="Black" />
                                </StackLayout>
                            </StackLayout>
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</Grid>

截图如下:

这是因为您的 ViewCell 中的 Grid 具有默认的 RowSpacing 和 ColumnSpacing。要覆盖它,只需设置 <Grid RowSpacing=0 ColumnSpacing=0>