在Xamarin Forms中推送多个页面

Ked*_*edu 2 navigation xamarin xamarin.forms

我有几种情况,我想以一个动作模式推送多个页面.一种情况是在我的应用程序开始时,我想初始化我的主页并在它上面推一个Splash-Page.我认为这是一种初始化应用程序的简洁方法,因为我的主页面是预先加载的,并且spash页面被推到它上面.当用户关闭启动页面时,我只需弹出启动页面即可完成.目前我在我的应用程序类中执行以下操作:

public App()
    {
        InitializeComponent();

        MainPage mainPage = new MainPage();
        SplashPage splashPage = new SplashPage();
        MainPage = mainPage;
        mainpage.Navigation.PushModalAsync(splashPage,false);
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是,虽然在Android上一切都按预期工作,但在iOS上显示Mainpage的时间很短,而不是由splash页面覆盖.这看起来不太好,并且对用户来说是令人厌恶的.

我知道,我可以通过其他方式处理上述示例,例如将启动页面设置为主页面,并在用户解除启动页面时将其与另一个页面交换.但我还有其他情况,并不是那么容易,而且前面设计页面堆栈的逻辑恰到好处.

所以,我的问题是,如何将多个页面推送到模态堆栈而不在iOS上显示每个页面的短时间帧.

hva*_*an3 5

我的回答是使用Navigation.InsertPageBefore().

iOS现在建议您使您的启动页面看起来像主页的超级简单版本.显然很多人不喜欢这样,因为他们想向世界展示他们时尚的泼溅页面.但是你可能也可以使用同样的想法.如果您的启动页面是红色背景,中间有徽标,则可以设置MainPageContentPage红色背景的空白,然后PushModalAsync将启动页面设置在顶部,然后在基本面前添加主页面ContentPage.一旦完成,你可以弹出你的Splash,用户就会盯着Main.

代码时间:

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
Run Code Online (Sandbox Code Playgroud)

这里唯一的问题是你需要阻止用户basicSplash通过从堆栈中删除页面,设置mainPage为.... MainPage,或者通过删除后退按钮和/或覆盖来返回ContentPage.OnBackButtonPressed