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

标签 xamarin navigation xamarin.forms

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

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/

相关文章:

android - OnConfigurationChanged 未在单声道 android 中调用

html - 带 Div 的导航栏

html - 创建导航菜单时遇到问题

css - 尝试仅使用 CSS 制作移动导航菜单

ios - 使用 Xamarin iOS 设计器添加等宽约束

.net - 如何解决 Xamarin.Firebase.iOS.Core - 8.10.0.1 nuget 安装错误

c# - 使 PCL Xamarin (MonoDroid/MonoTouch) 兼容的问题

xaml - 当内容不可见时隐藏列或行

xamarin - 使用 C# 后端时,有什么方法可以加快向页面添加新元素的速度?

c# - 如何在 xaml/mvvm 中启用/禁用 ffimageloading 转换? [Xamarin 表单]