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
相关产品推荐
相关产品推荐

