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

MAUI中如何将View宽度约束为高度?iOS适配问题求助

MAUI实现占满垂直空间的正方形Border解决方案

问题分析

iOS中在OnSizeAllocated里获取Border的Height为-1,是因为页面尺寸变化时控件尚未完成布局,实际测量值还未生成。此时应该监听控件自身的尺寸变化事件,或者使用绑定直接关联实际高度与宽度。

解决方案一:使用SizeChanged事件

XAML代码

<Grid VerticalOptions="Fill">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <Border x:Name="myBorder" Grid.Column="0" VerticalOptions="Fill" SizeChanged="MyBorder_SizeChanged" />
    <Grid Grid.Column="1" />
</Grid>

后台代码

private void MyBorder_SizeChanged(object sender, EventArgs e)
{
    if (sender is Border border && border.ActualHeight > 0)
    {
        border.WidthRequest = border.ActualHeight;
    }
}

解决方案二:纯XAML绑定实现

直接将Border的WidthRequest绑定到自身的ActualHeight,无需后台代码:

<Grid VerticalOptions="Fill">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <Border Grid.Column="0" VerticalOptions="Fill"
            WidthRequest="{Binding ActualHeight, RelativeSource={RelativeSource Self}}" />
    <Grid Grid.Column="1" />
</Grid>

说明

  • VerticalOptions="Fill"确保Border占满所在行的垂直可用空间
  • 第一列Width="Auto"会自动适应Border的宽度(即等于其高度),第二列Width="*"占据剩余水平空间
  • 两种方案都能在Android和iOS上正常工作,避免了iOS中布局时机导致的测量值未就绪问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:12:21