Xamarin.forms - 导航到主要详细信息页面的登录页面有一个奇怪的布局

时间:2016-03-06 08:59:38

标签: android login xamarin navigation

我有一个应用程序,其中包含一个登录页面,该页面在您打开应用程序时启动。进入主页面后,它会有一个主 - 详细信息页面来显示数据。问题是奇怪的布局。导航页面位于主 - 详细信息页面的顶部。像这样:enter image description here

这是登录的代码

public partial class LoginPage : ContentPage
           {
                public LoginPage ()
                {
                    InitializeComponent ();
                }
                async void OnSignUpButtonClicked (object sender, EventArgs e)
                {
                    await Navigation.PushAsync (new SignUpPage ());
                }

                async void OnLoginButtonClicked (object sender, EventArgs e)
                {
                    var user = new User {
                        Username = usernameEntry.Text,
                        Password = passwordEntry.Text
                    };

                    var isValid = AreCredentialsCorrect (user);
                    if (isValid) {
                        App.IsUserLoggedIn = true;
                        Navigation.InsertPageBefore (new MainPage (), this);
                        await Navigation.PopToRootAsync ();
                    } else {
                        messageLabel.Text = "Login failed";
                        passwordEntry.Text = string.Empty;
                    }
                }

                bool AreCredentialsCorrect (User user)
                {
                    return user.Username == Constants.Username && user.Password ==    Constants.Password;
                }
            }

1 个答案:

答案 0 :(得分:8)

这段代码看起来过于复杂,我看到类似的模式会导致Xamarin.Forms的渲染问题:

            Navigation.InsertPageBefore (new MainPage (), this);
            await Navigation.PopToRootAsync ();

由于当前页面已知是导航堆栈中的第一个也是唯一一个页面(据我所知),这应该足够了:

            Application.Current.MainPage = new MainPage ();

如果它不是导航堆栈中的唯一页面,您可能希望首先弹出导航堆栈(虽然不在Android上 - 这会导致问题):

            if (Device.OS == TargetPlatform.iOS) {
                await Navigation.PopToRootAsync ();
            }
            Application.Current.MainPage = new MainPage ();