Xamarin.Forms中这两种导航范例之间有什么区别?
await Navigation.PushModalAsync(new Dashboard());
await Navigation.PushModalAsync(new NavigationPage(new Dashboard()));
答案 0 :(得分:4)
Navigation.PushModalAsync
会导致新的Xamarin.Forms.Page
显示为Modally,这意味着它的动画将从屏幕底部开始,覆盖上一个当前页面,并且不包含后退按钮。
在iOS上,用户将无法向左滑动以返回上一页。
Android用户可以使用硬件返回按钮来关闭模态页面。
当您希望用户有意识地决定关闭页面时,模态页面非常有用。
示例
当iOS用户填写表单并向左滑动以返回时,是保存表单还是丢弃表单?用户不清楚。要使UX更直观,您应该以模态方式显示表单
使用await Navigation.PushModalAsync(new Dashboard());
会模拟显示Dashboard
页面,但新的网页不会拥有NavigationBar。
使用await Navigation.PushModalAsync(new NavigationPage(new Dashboard()));
也会模拟显示Dashboard
页面,但新的 会有一个NavigationBar。
示例应用源代码:https://github.com/brminnick/XamList
@AlessandroCaliaro我在下面的答案评论中进行了很好的讨论:
请注意Xamarin.Forms.INavigation
使用两个不同的堆栈ModalStack
和NavigationStack
,这一点很重要。 Navigation.PushModalAsync
向Page
添加ModalStack
,Navigation.PushAsync
向Page
添加NavigationStack
。
要从Page
中弹出ModalStack
,您需要使用Navigation.PopModalAsync()
,而使用Navigation.PopAsync()
从Page
中删除NavigationStack
{1}}。
答案 1 :(得分:-1)
首先,在"模式中推送页面"方式(顶部没有导航栏) 第二个...是一个错误,因为你试图将导航页面添加到导航堆栈,但我认为这是不可能的......