2017-03-06 84 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(); 

解決這個問題對我來說。