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 - 我的主应用程序文件应该命名为“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 获取设备位置的奇怪问题