Xamarin.Forms中ListView显示异常问题求助
解决ScrollView嵌套ListView的显示问题
你的核心问题是ScrollView和ListView嵌套使用——这两个都是可滚动控件,嵌套后会导致ListView无法正确计算自身高度,出现显示错乱(比如行高异常、内容挤压等)。直接按下面的方案修改即可:
修复步骤
- 移除外层的
ScrollView:ListView本身自带垂直滚动功能,不需要额外包裹ScrollView,这是问题的根源。 - 调整ListView的布局参数,让它直接填充父容器空间。
- 可选优化:将Grid的行高从
1*改为Auto,让行高自适应内容,避免多余空白。
修改后的完整XAML代码
<ListView x:Name="listViewm" ItemsSource="{Binding MySource}" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" Margin="20,0,20,0"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <Grid BackgroundColor="LightGray" Padding="1"> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*" /> <ColumnDefinition Width="1*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Label Grid.Column="0" Grid.Row="0" Text="{Binding x}" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" BackgroundColor="#E9EDF2" TextColor="Black" HorizontalTextAlignment="Center" Margin="1"/> <Label Grid.Column="1" Grid.Row="0" Text="x" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" BackgroundColor="#E9EDF2" TextColor="Black" HorizontalTextAlignment="Center" Margin="1"/> <Label Grid.Column="1" Grid.Row="1" Text="y" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" BackgroundColor="#E9EDF2" TextColor="Black" HorizontalTextAlignment="Center" Margin="1"/> <Label Grid.Column="0" Grid.Row="1" Text="{Binding y}" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" BackgroundColor="#E9EDF2" TextColor="Black" HorizontalTextAlignment="Center" Margin="1"/> <Label Grid.Column="1" Grid.Row="2" Text="z" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" BackgroundColor="#E9EDF2" TextColor="Black" HorizontalTextAlignment="Center" Margin="1"/> <Label Grid.Column="0" Grid.Row="2" Text="{Binding z}" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" BackgroundColor="#E9EDF2" TextColor="Black" HorizontalTextAlignment="Center" Margin="1"/> </Grid> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView>
补充说明
如果你的页面确实需要混合其他非滚动内容,建议将ListView和其他内容放在同一个布局容器(比如StackLayout)里,而不是用ScrollView包裹整个ListView。这样既能保留ListView的虚拟化性能,又能正常显示所有内容。
内容的提问来源于stack exchange,提问作者Naifar Sirine
相关产品推荐
相关产品推荐

