Xamarin Forms MasterDetailPage - 在iOS上绘制两次的二级菜单

时间:2017-03-06 16:36:02

标签: xamarin xamarin.forms master-detail

我的应用程序使用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上这种奇怪的效果?

2 个答案:

答案 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();

为我解决了这个问题。