我在几种情况下希望将多个页面作为一个操作以模态方式推送。一种情况是在我的应用程序开始时,我想初始化我的主页并在其上方推送一个启动页面。我认为这是初始化应用程序的一种干净方法,因为我的主页是预先加载的,并且垃圾页面被推到了它上面。当用户关闭启动页面时,我只需弹出启动页面即可完成。目前我在我的应用程序类中执行以下操作:
public App()
{
InitializeComponent();
MainPage mainPage = new MainPage();
SplashPage splashPage = new SplashPage();
MainPage = mainPage;
mainpage.Navigation.PushModalAsync(splashPage,false);
}
我的问题是,虽然在 Android 上一切都按预期工作,但在 iOS 上,显示主页的时间很短,而不是被启动页面覆盖。这看起来不太好,而且会让用户反感。
我知道,我可以通过其他方式处理上面的示例,例如将启动页面设置为主页,并在用户关闭启动页面时将其与另一个页面交换。但在其他情况下,这并不那么容易,而且预先设计页面堆栈是合乎逻辑的。
所以,我的问题是,如何将多个页面推送到模式堆栈,而不在 iOS 上短时间内显示每个页面。
最佳答案
我的答案是使用Navigation.InsertPageBefore()
。
iOS 现在建议您让启动页面看起来像主页的 super 简单版本。显然很多人不喜欢这样,因为他们想向世界展示他们时尚的醒目页面。但你也许可以使用同样的想法来实现这一点。如果您的初始页面是红色背景,中间有 Logo ,则可以将 MainPage
设置为具有红色背景的空 ContentPage
,然后设置 PushModalAsync
> 将初始页面放在顶部,然后将 MainPage 添加到基本 ContentPage
前面。完成后,您只需弹出 Splash,用户就会盯着主屏幕。
编码时间:
ContentPage basicSplash = new ContentPage { BackgroundColor = Color.Red };
NavigationPage nav = new NavigationPage(basicSplash); //Do Navigation Page here with basic in it
MainPage = nav; //Set basic splash
nav.Navigation.PushModalAsync(new SplashPage(), false); //Show SplashPage modal over basic
nav.Navigation.InsertPageBefore(new MainPage(), basicSplash); //You are now adding MainPage to the NavigationStack, not the ModalStack
nav.Navigation.RemovePage(basicSplash); //Remove basic splash, so now only MainPage is left sitting in NavigationStack
//Now you can do nav.PopModalAsync() when ready and the user should be looking at the MainPage since there is nothing left in the ModalStack and only MainPage is sitting in the NavigationStack
这里唯一的问题是,您需要通过从堆栈中删除页面并将 mainPage
设置为您的页面来阻止用户返回到 basicSplash
。 ... MainPage
,或者通过删除后退按钮和/或覆盖 ContentPage.OnBackButtonPressed
关于xamarin - 在 Xamarin Forms 中推送多个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45372909/