Xamarin Forms Secondary ToolbarItem в TabbedPage на iOS

Мое приложение ведет себя очень странно на iOS, у меня есть TabPage с 3 вкладками. На первом изображении вы можете видеть, что у меня есть 4 дополнительных элемента панели инструментов на первой вкладке. Странная вещь находится на странице с картой, где у меня нет Secondary ToolbarItem, пространство между NavigationBar и картой все еще есть. Кто-нибудь знает, как это исправить или это ошибка Xamarin?

NavPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:view="clr-namespace:CarPar.View;assembly=CarPar"
            x:Class="CarPar.Navigation.NavPage"
            Title = "{Binding PageTitle}">

  <view:HomePage />
  <view:MapPage />
  <view:FavoritePage />

</TabbedPage>

HomePage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:view="clr-namespace:CarPar.View;assembly=CarPar"
             x:Class="CarPar.View.HomePage"
             Title="City"
             Icon="home.png">
    <ContentPage.ToolbarItems>
        <ToolbarItem Text="Alphabetisch" />
        <ToolbarItem Text="Freie Plätze" />
        <ToolbarItem Text="Prozent frei" />
        <ToolbarItem Text="Entfernung" />
    </ContentPage.ToolbarItems>
    <StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
        <SearchBar Placeholder="Parkhaus suchen" Text="{Binding SearchText}" />
    ...
    <StackLayout>
</ContentPage>

MapPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"
             x:Class="CarPar.View.MapPage"
             Title="Karte"
             Icon="map.png">
    <ContentPage.Content>
        <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
            <maps:Map x:Name="ParkingMap"
          IsShowingUser="True"
          MapType="Street"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

person zperee    schedule 04.04.2017    source источник
comment
Это кажется очевидным; элементы панели инструментов являются частью вашего HomePage.xaml, и, нажимая вкладку «Карта», вы фактически переключаетесь на MapPage.xaml, в котором отсутствуют элементы панели инструментов.   -  person Gerald Versluis    schedule 04.04.2017
comment
@GeraldVersluis В том-то и дело. На панели инструментов нет элементов, но пространство между заголовком и картой все еще есть, и в этом проблема.   -  person zperee    schedule 04.04.2017
comment
Приложение делает то же самое в Android? или это что-то конкретное для iOS?   -  person Enrique Zavaleta    schedule 04.04.2017
comment
@EnriqueZavaleta Нет, это только в iOS. В Android вторичная панель инструментов не находится под заголовком, поэтому проблем с пространством нет.   -  person zperee    schedule 04.04.2017
comment
Как именно вы создаете эту вторичную панель инструментов? Это сделано с помощью специального средства визуализации? Если да, не могли бы вы добавить к своему вопросу код средства визуализации?   -  person Tim Klingeleers    schedule 04.05.2017
comment
Нет, специального рендерера нет. Они создаются только с помощью кода xaml   -  person zperee    schedule 06.05.2017


Ответы (1)


Вы создаете элементы панели инструментов в первом «контроллере просмотра», который вы помещаете в стек панелей вкладок. они становятся частью контроллера навигации. Поэтому, когда вы загружаете вторую страницу, на которой нет информации для передачи на панель инструментов, она не отображается, но технически все еще является частью представления, поэтому она отображает пространство вверху, я считаю, что есть несколько способы остановить это поведение, первый переключает на вас с помощью AutoLayout.

    public MySecondPage()
    {
        InitializeComponent();
        NavigationPage.SetHasNavigationBar(this, false);  // Hide nav bar
    }

Если это не сработает, дайте мне знать, есть другие менее изящные варианты.

person Digitalsa1nt    schedule 09.05.2017