为啥横向模式下的扩展布局在 Xamarin Forms 中显示半黑屏?

Posted

技术标签:

【中文标题】为啥横向模式下的扩展布局在 Xamarin Forms 中显示半黑屏?【英文标题】:Why does extented layout on landscape mode shows half black screen in Xamarin Forms?为什么横向模式下的扩展布局在 Xamarin Forms 中显示半黑屏? 【发布时间】:2020-12-23 07:41:01 【问题描述】:

我有两个视图和两个内容页面,我让它们垂直排列,当设备处于纵向模式时显示,如下所示:

<StackLayout>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>

                <views:ScoresView Grid.Row="0"/>
                <views:CategoriesView Grid.Row="1"/>

            </Grid>
        </StackLayout>

以及横向模式的其他内容页面

<StackLayout>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>

            <views:ScoresView Grid.Column="0"/>
            <views:CategoriesView Grid.Column="1"/>
        </Grid>
    </StackLayout>

我希望它看起来像这样:

但看起来像这样:

这就是我在旋转移动时调用其中一个或另一个的方式

protected override void OnSizeAllocated(double width, double height)
        
            base.OnSizeAllocated(width, height);
            if (width > height)
            
                //device is landscape
                App.Current.MainPage = new CategoriesLands();
            
            else
            
                //device is portrait (or square)
            
        

【问题讨论】:

【参考方案1】:

您可以更改 StackLayout StackOrientation 属性来达到效果。

<StackLayout x:Name="outerStack">       
     <views:ScoresView HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"/>
     <views:CategoriesView HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"/>
</StackLayout>

在后面的代码中:

private double width;
private double height;
protected override void OnSizeAllocated(double width, double height)
    
        base.OnSizeAllocated(width, height);
        if (width != this.width || height != this.height)
        
            this.width = width;
            this.height = height;
            if (width > height)
            
                outerStack.Orientation = StackOrientation.Horizontal;
            
            else
            
                outerStack.Orientation = StackOrientation.Vertical;
            
        
    

您可以参考this。

【讨论】:

以上是关于为啥横向模式下的扩展布局在 Xamarin Forms 中显示半黑屏?的主要内容,如果未能解决你的问题,请参考以下文章

为啥Android正常布局文件夹总是以横向模式打开屏幕

为啥我的按钮在横向模式下不显示?

为啥 xamarin 表单列表视图中的组标题在发布模式下不可见?

在横向模式下隐藏ToolBar Xamarin.Forms

纵向模式下的动画UIView在ios上横向不一致

Android横向模式下的渲染问题