我的应用程序使用Master-Detail导航 我在导航堆栈上推送页面以具有后退按钮功能 使用ToolbarItems(二级菜单)推送页面时,这在Android上运行正常,但它会使iOS上的菜单项翻倍。 切换到同一页面(不推送),iOS上没有问题(二次菜单显示一次,如预期的那样)。
我采用了官方的MasterDetail示例(https://github.com/xamarin/xamarin-forms-samples/tree/master/Navigation/MasterDetailPage)来说明我的意思,请参阅solution zip file。
在iOS设备上编译并启动它,按第一页上的按钮打开一个子页面,你会看到加倍的菜单项(实际上是一个被绘制两次),所以有两行二级菜单项可见而不仅仅是一个 这两行是相同的,两行(及其菜单项)在敲击时都会起作用。
如果您通过汉堡菜单选择提醒页面,则辅助菜单可以正常使用(即使在iOS上),因为页面未在导航堆栈上推送但已切换。
一些有趣的部分:
ContactsPage.xaml.cs:
SwitchToDetailPageAndPushOnNavStack()
ReminderPage.xaml:
<ContentPage.ToolbarItems>
<ToolbarItem Text="Do something" Clicked="OnDoSomethingClicked" Order="Secondary" />
</ContentPage.ToolbarItems>
我可以做些什么来消除iOS上这种奇怪的效果?
答案 0 :(得分:1)
看起来您正在添加一个似乎导致问题的新NavigationPage。您使用以下方法阻止额外的导航栏: NavigationPage.SetHasNavigationBar(newPage,false); 但仍然添加了两次工具栏项。
如果您采用通常的方式推送页面,那么此问题就会消失。例如。在ContactsPage.xaml.cs文件中,更改:
private void OnOpenSubPageClicked(object sender, EventArgs args)
{
Device.BeginInvokeOnMainThread(() =>
{
MainPage mainPage = App.Instance.MainPage as MainPage;
if (null != mainPage)
mainPage.SwitchToDetailPageAndPushOnNavStack(mainPage.MasterPage.RemindersPageItem);
})
}
为:
private async void OnOpenSubPageClicked(object sender, EventArgs args)
{
await Navigation.PushAsync(new ReminderPage());
}
这似乎按预期工作。
答案 1 :(得分:0)
我有类似的问题。发布此处以防其他人发现自己处于此绑定状态。
当我在App.cs中使用此代码时,我得到了加倍的工具栏......
MainPage = new NavigationPage(new MyApp.Home());
但将其改为
MainPage = new MyApp.Home();
为我解决了这个问题。