gpt4 book ai didi

xamarin - 在 Xamarin Forms 中推送多个页面

转载 作者:行者123 更新时间:2023-12-02 12:05:20 25 4
gpt4 key购买 nike

我在几种情况下希望将多个页面作为一个操作以模态方式推送。一种情况是在我的应用程序开始时,我想初始化我的主页并在其上方推送一个启动页面。我认为这是初始化应用程序的一种干净方法,因为我的主页是预先加载的,并且垃圾页面被推到了它上面。当用户关闭启动页面时,我只需弹出启动页面即可完成。目前我在我的应用程序类中执行以下操作:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com