Xamarin Forms 在 iOS 的主详细信息页面中重复的工具栏

Posted

技术标签:

【中文标题】Xamarin Forms 在 iOS 的主详细信息页面中重复的工具栏【英文标题】:Xamarin Forms duplicated Toolbar in Master Detail Page in iOS 【发布时间】:2018-11-13 09:17:16 【问题描述】:

我有一个应用程序,每个页面都有主详细信息页面和工具栏项。我将主详细信息页面和主页面设置为 NavigationPage.HasNavigationBar="False" 以避免重复工具栏项。在 android 中,它工作正常且没有重复,但对于 ios,它仍然为具有 Order="Secondary" 的工具栏项提供重复

这里是菜单页(详情页):

 <?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:controls="clr-namespace:ImageCircle.Forms.Plugin.Abstractions;assembly=ImageCircle.Forms.Plugin"
             xmlns:effects="clr-namespace:AppXamarin"
             x:Class="AppXamarin.Pages.MenuPage" NavigationPage.HasBackButton="False">
    <ContentPage.BackgroundImage>
        <OnPlatform Android="exp20181029Artboard46" iOS="OnIdiom Phone='exp20181029Artboard46',Tablet='Artboard'"/>
    </ContentPage.BackgroundImage>
    <ContentPage.ToolbarItems>
        <ToolbarItem Name="menuitem1" Order="Secondary" Text="logout" Priority="0" Clicked="MenuItem1_Clicked"/>
        <ToolbarItem Order="Primary"  Priority="1" Clicked="cart_Clicked" Text="cart" x:Name="cart"/>
        <ToolbarItem Order="Primary"  Priority="0" Text="search" x:Name="searchbar" Icon="search.png"/>
    </ContentPage.ToolbarItems>

主主页:

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                  xmlns:local="clr-namespace:AppXamarin.Pages"
                  x:Class="AppXamarin.Pages.MasterMainPage" NavigationPage.HasNavigationBar="False" NavigationPage.HasBackButton="False"
                  >

    <MasterDetailPage.Master>
        <local:MasterPage x:Name ="masterPage"/>
    </MasterDetailPage.Master>

    <MasterDetailPage.Detail>
        <NavigationPage>
            <x:Arguments>
                <local:MenuPage></local:MenuPage>
            </x:Arguments>
        </NavigationPage>
    </MasterDetailPage.Detail>
</MasterDetailPage>

和母版页:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="AppXamarin.Pages.MasterPage"
           NavigationPage.HasNavigationBar="False" NavigationPage.HasBackButton="False" >
    <ContentPage.Title>
        <OnPlatform Android="Menu" iOS="☰"/>
    </ContentPage.Title>
    <ContentPage.Icon>
        <OnPlatform Android="menu.png"/>
    </ContentPage.Icon>
    <ContentPage.Content>
        <StackLayout>
            <Label Text="Welcome to Xamarin.Forms!"
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

iOS结果here

Android 结果here

提前致谢。

【问题讨论】:

【参考方案1】:
switch (Device.RuntimePlatform)
        
            case Device.iOS:

                NavigationPage.SetHasNavigationBar(this, false);
                break;
        

在代码隐藏中试试这个

【讨论】:

还是一样,你可以看到我已经在 Xaml 的 Master Page 和 Master Main Page 中都将它设置为 false。似乎主-详细信息页面中的次要订单存在错误,我通过在 iOS 上将其设置为主要,在 Android 上将其设置为次要来修复它【参考方案2】:

iOS 上可能存在辅助工具栏项目的错误。我通过将顺序设置为 iOS 上的主要和 Android 上的次要来处理它。

<ToolbarItem Name="menuitem1" Text="logout" Priority="0" Clicked="MenuItem1_Clicked">
            <ToolbarItem.Order>
                <OnPlatform Android="Secondary" iOS="Primary"/>
            </ToolbarItem.Order>

【讨论】:

以上是关于Xamarin Forms 在 iOS 的主详细信息页面中重复的工具栏的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin.forms 中的多个页面之间导航?

Xamarin.Forms - 我的主应用程序文件应该命名为“App.cs”还是“name_of_project.cs”?

Xamarin.Forms MasterDetailPage,其中部分母版在详细信息中可见

Xamarin.forms(或)xamarin.ios/xamarin.android(或)本机

单击 Xamarin.Forms 中的 ListView 项后完整显示详细信息

在 iOS 上的 Xamarin.Forms.Maps 中使用 Xamarin.Essentials Geolocation 获取设备位置的奇怪问题