You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI iOS端CollectionView高度异常,最后项被截断求助

解决.NET MAUI中iOS端CollectionView占据全屏导致最后一项被截断的问题

针对你遇到的iOS端CollectionView忽略上方元素、占据全屏高度导致最后一项截断的问题,可通过以下调整解决:

1. 给CollectionView添加明确的垂直布局约束

iOS布局引擎对无显式约束的CollectionView空间计算存在偏差,添加VerticalOptions="FillAndExpand"确保它填充分配的Grid行空间,而非拉伸至全屏。

2. 显式指定CollectionView的ItemsLayout

显式设置线性布局能帮助iOS正确识别列表方向,准确计算内容高度,避免布局溢出:

<CollectionView.ItemsLayout>
    <LinearItemsLayout Orientation="Vertical" />
</CollectionView.ItemsLayout>

3. 确认父容器约束正确

确保包含该Grid的父容器(如ContentPage的Content)设置了VerticalOptions="FillAndExpand",保证Grid的高度被屏幕边界约束,不会无限制拉伸。

修改后的完整代码

<Grid RowDefinitions="40, Auto, *">
    <Button
        Grid.Row="0"
        Margin="0,0,16,0"
        HorizontalOptions="End"
        Text="{x:Static resources:Translations.AddBudgetLabel}"
        VerticalOptions="Center"
        Command="{Binding GoToAddBudgetCommand}" />

    <HorizontalStackLayout Margin="18,6,12,6"
                           Spacing="6"
                           Grid.Row="1">
        <Label Style="{StaticResource TextBodySecondary}"
               Text="{x:Static resources:Translations.MonthlyBudgetLabel}" />
        <Label Style="{StaticResource TextBodySecondary}"
               Text="{Binding BudgetedAmount, Converter={StaticResource AmountFormatConverter}}" />
    </HorizontalStackLayout>

    <CollectionView Grid.Row="2"
                    BackgroundColor="Transparent"
                    ItemsSource="{Binding Budgets}"
                    SelectionMode="None"
                    VerticalOptions="FillAndExpand">
        <CollectionView.ItemsLayout>
            <LinearItemsLayout Orientation="Vertical" />
        </CollectionView.ItemsLayout>
        
        <CollectionView.ItemTemplate>
            <DataTemplate x:DataType="budget:BudgetListItemViewModel">
                <Grid Padding="12,6,12,8">
                    <controls:Card HeightRequest="80" Padding="12">
                        <Border.GestureRecognizers>
                            <TapGestureRecognizer
                                Command="{Binding ViewModel.EditBudgetCommand, Source={x:Reference BudgetList}}"
                                CommandParameter="{Binding .}" />
                        </Border.GestureRecognizers>

                        <VerticalStackLayout Spacing="6">
                            <Label Style="{StaticResource TextHead}"
                                   Text="{Binding Name}" />

                            <ProgressBar Progress="{Binding SpendingPercentage}" />

                            <Grid>
                                <Label
                                    Text="{Binding CurrentSpending, Converter={StaticResource AmountFormatConverter}}"
                                    HorizontalOptions="Start"
                                    Style="{StaticResource TextBodySecondary}" />

                                <Label
                                    Text="{Binding SpendingLimit, Converter={StaticResource AmountFormatConverter}}"
                                    HorizontalOptions="End"
                                    Style="{StaticResource TextBodySecondary}" />
                            </Grid>
                        </VerticalStackLayout>
                    </controls:Card>
                </Grid>
            </DataTemplate>
        </CollectionView.ItemTemplate>

        <CollectionView.EmptyView>
            <Grid>
                <Label Style="{StaticResource TextSubheadSecondary}"
                       Margin="10,0,10,0"
                       VerticalTextAlignment="Center"
                       HorizontalTextAlignment="Center"
                       Text="{x:Static resources:Translations.NoBudgetsMessage}" />
            </Grid>
        </CollectionView.EmptyView>
    </CollectionView>
</Grid>

问题原因说明

  • iOS与Android布局引擎的空间计算逻辑存在差异,对于Grid中*分配的空间,无显式约束的CollectionView可能错误地将可用空间判定为全屏高度。
  • 显式指定LinearItemsLayout能让iOS端准确识别列表的垂直布局方向,从而正确计算每个Item高度和整体内容高度,避免最后一项被截断。

内容的提问来源于stack exchange,提问作者NPadrutt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:07:53