我有一个应用程序,其中包含一个登录页面,该页面在您打开应用程序时启动。进入主页面后,它会有一个主 - 详细信息页面来显示数据。问题是奇怪的布局。导航页面位于主 - 详细信息页面的顶部。像这样:
这是登录的代码
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;
}
}
答案 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 ();