如何在Xamarin.Forms中设置ListView行高

13

我想在XAML文件中为iOS设备设置ListView的高度,使用下面提到的代码和绑定。

  1. 我已经使用了可观察的集合来通知属性值更新,它得到了通知并设置了正确的值,但是在iOS模拟器或设备上没有反映出来,但在Android和Windows Phone设备上运行良好。
<ListView  Grid.Row="2" Grid.Column="1"  ItemsSource="{Binding QuestionAnswerList,Mode=TwoWay}"  SelectedItem="{Binding SelectedData,Mode=TwoWay}"                   
        HasUnevenRows="true" 
        RowHeight="{Binding Custom_height,Mode=TwoWay}"  
        BackgroundColor="Silver" 
        HorizontalOptions="FillAndExpand" 
        VerticalOptions="FillAndExpand">
        <ListView.ItemTemplate>
  1. 我尝试过将列表视图的行高设置为静态值,但也不起作用。

  2. 我没有给任何高度,并将网格RowDefinition的高度设置为“*”,但仍然无法设置ListView的高度,而是会重叠到下一个ListView行的详细信息上。

谢谢。

2个回答

22
在 iOS 上,当你把 ListView.HasUnevenRows 设置为 true 时,你还需要为每个单元格设置 Cell.Height 属性值,因为渲染器无法从内容中推断出高度。你也可以像在示例中一样使用 ListView.RowHeight 来处理均匀的行。在这种情况下,不要设置 ListView.HasUnevenRows(或将其设置为 false)。

8

尝试使用 StackLayout 而不是 ListView:

<StackLayout BindableLayout.ItemsSource="{Binding Items}">
    <BindableLayout.ItemTemplate>
        <DataTemplate>
            <StackLayout Margin="0,0,0,5">
                <Label Text="{Binding Name}"/>
            </StackLayout>
        </DataTemplate>
    </BindableLayout.ItemTemplate>
</StackLayout>

我花了好几天时间寻找这个。一种可以制作列表且不被困在烦人的默认系统列表中的方法。非常感谢你。 - quemeful
这个解决方案是一个非常好的替代方法,用来取代具有HasUnevenRows="true"属性的ListView,在iOS上存在很多问题,因为行无法根据内容动态调整高度。对于我们的情况,当使用这个替代方案时唯一缺少的是下拉刷新功能,并且需要将StackLayout包装在ScrollView中。 - Andrew Au

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接