我们有一个项目使用NavigationPage
和TabbedPage
按预期在iOS中运行,但不使用Android(Xamarin Forms(2.3.3.193)和Prism(6.3.0))。
我已经设置了sample project available here。
此应用程序包含三个嵌套在NavigationPage
和TabbedPage
(APage,BPage和CPage)和第四个页面的页面,这些页面应该丢失TabbedPage
并保留{ {1}}(B1页可通过BPage获得)。
NavigationPage
Opening APage with navigation and tab bar on iOS和looks fine on Android
BPage has an 'Add' button on the navigation bar也是looks fine on Android
点击'添加'应该打开B1Page。这仍然有导航栏(使用'保存'按钮而不是'添加')但没有标签栏。
NavigationService.NavigateAsync("NavigationPage/LayoutTabbedPage/APage");
但是在Android B1Page上标签栏仍然保留,原始导航栏也是如此(使用“添加”按钮而不是“保存”)。
我做导航是否有问题导致这些不一致?
答案 0 :(得分:2)
是的,您的导航存在问题。首先,如果要在TabbedPage中导航并保留选项卡,则需要将Tab包装在NavigationPage中,而不是NavigationPage中的TabbedPage。像这样:
<NavigationPage Title="B">
<x:Arguments>
<local:BPage />
</x:Arguments>
</NavigationPage>
这将允许您在实际标签中导航。
如果这不是您想要做的,那么将tabbedPage保存在导航页面中,然后当您导航到B1Page时,使用'NavigateAsync(“B1Page”,usemodalNavigation:false)`强制执行异步导航调用。这会使您退出选项卡页面,但会使用后退箭头和工具栏项目进入导航页面。
其次,你的导航Uri是一团糟。 Prism中的导航与你所称的相关。
当您拨打此电话m_navigationService.NavigateAsync("NavigationPage/LayoutTabbedPage/BPage/B1Page");
时,您将再次将所有这些页面推送到导航堆栈。如果您点击Android上的后退按钮,您将看到我的意思。
您所要做的就是从BPageViewModel调用NavigateAsync(“B1Page”);.
这应该让你指出正确的方向。