2017-03-06 67 views
1

我的应用程序绘制两次二级菜单采用主详细的导航。
我在导航堆栈上推送页面以具有后退按钮功能。
推动与ToolbarItems(二级菜单)页面时,这是在Android上很好,但它双打iOS上的菜单项。
切换到相同的页面(不推),iOS上没有问题(如预期的那样,二级菜单显示一次)。Xamarin窗体MasterDetailPage - 在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上的这种怪异的效果呢?

回答

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()); 
} 

,似乎工作。

+0

谢谢你,那是有效的。 NavigationPage。SetHasNavigationBar(newPage,false)在我的代码中调用了以下评论: '// iOS:隐藏导航栏,以避免同时有多行回溯和汉堡包导航 所以我想,在过去的某个时候,是必要的,但现在它似乎是有害的。好的,还有一个教训... – HeliG

0

我有一个类似的问题。张贴在这里,以防其他人发现自己处于这种捆绑状态。

我得到了加倍的工具栏时,我曾在App.cs这个代码...

MainPage = new NavigationPage(new MyApp.Home()); 

但将其更改为

MainPage = new MyApp.Home(); 

解决这个问题对我来说。