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

Xamarin Forms隐藏导航栏PushAsync返回后底部空白,是框架bug还是XAML问题

Xamarin Forms 导航返回后登录页底部异常空白问题

问题描述

  • 基于Xamarin Forms开发的项目,使用Navigation.PushAsync()方法实现跨页面导航
  • 登录页配置NavigationPage.HasNavigationBar="False",隐藏系统导航栏
  • 登录页首次加载时界面显示完全正常
  • 点击页面内的“忘记密码”标签跳转至重置密码页,从重置密码页返回登录页时,页面底部会出现一块无内容的白色空白区域
  • 暂未明确问题根因,无法判断该异常是Xamarin Forms框架本身的已知Bug,还是自身编写的XAML布局、后台交互代码存在配置问题,需要明确问题定位方向

问题现场

  • 界面异常状态截取图

相关代码

登录页XAML定义

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:DeliveryApplication.Tools" 
             xmlns:forms="clr-namespace:Lottie.Forms;assembly=Lottie.Forms"
             x:Class="DeliveryApplication.LoginPage"
             NavigationPage.HasNavigationBar="False">
    
    <ContentPage.Content>
        <ScrollView x:Name="parent" BackgroundColor="{Binding Source={x:Static local:Constants.PRIMARY_COLOR}}">
            <StackLayout>
                <StackLayout Padding="10, 0, 10, 0" Spacing="10">
                    <forms:AnimationView  x:Name="animationView" Animation="delivery_animation.json" AnimationSource="AssetOrBundle" 
                                      AutoPlay="True" RepeatMode="Restart" RepeatCount="1000000" VerticalOptions="StartAndExpand"
                                      HeightRequest="200" WidthRequest="200"/>
            
                    <Grid ColumnSpacing="0">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>

                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="35" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                
                        <local:RoundedEntry x:Name="usernameEntry" MaxLength="25" Placeholder="Username" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2"/>
                        <Image x:Name="usernameImage" Source="{local:ImageResource DeliveryApplication.Logos.username.png}" Grid.Column="0" Grid.Row="1" Margin="10, 0, 0, 0"/>

                        <local:RoundedEntry x:Name="passwordEntry" MaxLength="25" Placeholder="Password" IsPassword="True" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2"/>
                        <Image x:Name="passwordImage" Source="{local:ImageResource DeliveryApplication.Logos.password.png}" Grid.Column="0" Grid.Row="2" Margin="10, 0, 0, 0" />
                    </Grid>

                    <StackLayout Orientation="Horizontal">
                        <StackLayout Orientation="Horizontal" HorizontalOptions="Start">
                            <CheckBox x:Name="rememberMeCheckbox"/>
                            <Label x:Name="rememberMeLabel" Text="Remember Me" VerticalOptions="Center">
                                <Label.Triggers>
                                    <DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference rememberMeCheckbox}, Path=IsChecked}" Value="true">
                                        <Setter Property="FontAttributes" Value="Italic, Bold" />
                                    </DataTrigger>
                                </Label.Triggers>

                                <Label.GestureRecognizers>
                                    <TapGestureRecognizer Tapped="rememberMeLabel_Tapped" />
                                </Label.GestureRecognizers>
                            </Label>
                        </StackLayout>

                        <Label x:Name="forgotPasswordLabel" Text="Forgot your password?" TextDecorations="Underline" 
                               HorizontalOptions="EndAndExpand" VerticalOptions="Center" >
                            <Label.GestureRecognizers >
                                <TapGestureRecognizer Tapped="forgotPasswordLabel_Tapped" />
                            </Label.GestureRecognizers>
                        </Label>

                    </StackLayout>

                    <Button x:Name="signInBtn" Text="Sign In" BorderWidth="5" BorderRadius="10" TextColor="Black"
                            BackgroundColor="{Binding Source={x:Static local:Constants.ACCENT_COLOR}}" Clicked="signInBtn_Clicked"/>
            
                    <ActivityIndicator x:Name="activityIndicator" IsRunning= "True" IsVisible="False"/>
                </StackLayout>

                <StackLayout x:Name="footer" VerticalOptions="EndAndExpand" HorizontalOptions="CenterAndExpand">
                    <Label x:Name="tgLbl" FontSize="Small" Text="Powered by Technology-Gate" Margin="0, 0, 0, 10">
                        <Label.GestureRecognizers>
                            <TapGestureRecognizer Tapped="tgLbl_Tapped"/>
                        </Label.GestureRecognizers>
                    </Label>
                </StackLayout>
            </StackLayout>
        </ScrollView>
    </ContentPage.Content>

</ContentPage>

后台跳转逻辑代码

private async void forgotPasswordLabel_Tapped(object sender, EventArgs e)
{
    /* 忘记密码标签点击跳转逻辑 */
    // Application.Current.MainPage = new NavigationPage(new ResetPasswordPage());
    await Navigation.PushAsync(new ResetPasswordPage());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 06:06:01