2017-03-06 3 views
1

내 앱에서 마스터 - 세부 탐색을 사용합니다.
탐색 스택의 페이지를 눌러 뒤로 버튼 기능을 사용합니다.
ToolbarItems (보조 메뉴)가있는 페이지를 푸시하면 Android에서는 문제가 없지만 iOS에서는 메뉴 항목이 두 배로 늘어납니다.
동일한 페이지로 이동하면 (푸시하지 않음) iOS (두 번째 메뉴가 예상대로 표시됨)에 문제가 없습니다.Xamarin Forms 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(); 

에 나를 위해 문제를 해결했다.