Xamarin iOS中如何让StackLayout根据嵌套内容自动调整高度?
XAML中StackLayout适配Expander动态高度解决方案
问题根因
当前布局不显示的核心原因是:内层Grid设置了VerticalOptions="FillAndExpand",该属性会要求元素占用父容器StackLayout的所有剩余可用空间。但外层StackLayout本身是自适应高度逻辑,没有预先设定固定高度,最终计算出来的可用剩余空间为0,导致Grid被压缩至不可见。
解决方案
方案1:修改Grid的布局属性
直接将内层Grid的VerticalOptions属性从FillAndExpand改为Start,或者直接删除该属性(默认值为Start)即可。修改后的代码如下:
<Grid IsVisible="{Binding isVisible}" VerticalOptions="Start" HorizontalOptions="FillAndExpand">
Start属性会让Grid根据自身内部内容的高度计算尺寸,Expander展开/折叠时会自动触发父容器重算布局,外层StackLayout也会同步适配高度,不需要手动设置固定值。
方案2:替换外层容器为Grid
如果StackLayout内还有其他子元素需要布局,可将外层StackLayout替换为Grid,给存放Expander的行设置高度为Auto,也能实现动态适配:
<Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <!-- 其他自定义行定义 --> </Grid.RowDefinitions> <!-- 原有内层Grid代码 --> <Grid IsVisible="{Binding isVisible}" Grid.Row="0" HorizontalOptions="FillAndExpand"> <!-- 内部原有内容保持不变 --> </Grid> </Grid>
内容的提问来源于stack exchange,提问作者GuybrushThreepwood
相关产品推荐
相关产品推荐

