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

ScrollView内行高为Auto的Grid高度异常、内容截断、无法滚动问题

问题原因

这是Xamarin.Forms/MAUI中布局测量机制的常见问题,核心诱因有两个:

  • Grid默认VerticalOptions为Fill,会主动适配父容器(ScrollView)的固定高度,不会根据自身内容撑开尺寸
  • 后续修改已有子控件的文本内容时,Grid不会自动触发全局尺寸重算,导致总高度一直保持初始数值,超出ScrollView高度的内容就会被截断
解决方案

第一步:修正布局基础属性

修改布局代码,给ScrollView开启垂直滚动、给Grid设置垂直对齐为顶部,避免其被强制填充ScrollView高度:

<ScrollView HeightRequest="500" BackgroundColor="Yellow" VerticalScrollBarVisibility="Auto">
    <Grid x:Name="gridLignes" BackgroundColor="#E8E8E8" VerticalOptions="Start">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <!-- 后续新增行统一保持Height为Auto即可 -->
        </Grid.RowDefinitions>
    </Grid>
</ScrollView>

第二步:修改内容后强制触发重测

每次修改完Grid内控件的文本、或者新增/删除行之后,主动调用Grid的测量失效方法,让它重新计算总高度:

// 你修改完子控件内容的逻辑后追加这一行
gridLignes.InvalidateMeasure();
效果验证

调整后Grid会自动根据所有行的内容总高度调整自身尺寸:内容不足500时ScrollView不会出现空白,内容超出500时ScrollView自动开启滚动,不需要给Grid设置固定高度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 17:36:04