Xamarin Forms iOS 如何仅在iOS端移除ToolbarItems的IconImageSource
解决方案
方法1:XAML端直接配置(推荐)
直接通过Xamarin.Forms内置的OnPlatform标记扩展实现平台差异化配置,无需修改后台逻辑,修改后的ToolbarItems代码如下:
<TabbedPage.ToolbarItems> <ToolbarItem x:Name="searchOptn" Clicked="searchOptn_Clicked"> <ToolbarItem.IconImageSource> <OnPlatform x:TypeArguments="ImageSource"> <On Platform="Android" Value="{local:ImageResource Bufib.Logos.search.png}" /> <On Platform="iOS" Value="{x:Null}" /> </OnPlatform> </ToolbarItem.IconImageSource> </ToolbarItem> <ToolbarItem x:Name="syncOptn" Clicked="syncOptn_Clicked"> <ToolbarItem.IconImageSource> <OnPlatform x:TypeArguments="ImageSource"> <On Platform="Android" Value="{local:ImageResource Bufib.Logos.sync.png}" /> <On Platform="iOS" Value="{x:Null}" /> </OnPlatform> </ToolbarItem.IconImageSource> </ToolbarItem> <ToolbarItem x:Name="favouriteOptn" Clicked="favouriteOptn_Clicked" Order="Secondary"/> <ToolbarItem x:Name="visibilityOptn" Clicked="visibilityOptn_Clicked" Order="Secondary"/> </TabbedPage.ToolbarItems>
该方案会自动在Android端加载图标,iOS端不加载图标,直接规避崩溃问题。
方法2:后台代码动态处理
如果偏好代码控制,可以在页面的构造函数或者OnAppearing生命周期方法中添加平台判断逻辑,代码如下:
// 替换为你的页面类名 public YourTabbedPage() { InitializeComponent(); // 仅在iOS平台移除ToolbarItem的图标 if (Device.RuntimePlatform == Device.iOS) { searchOptn.IconImageSource = null; syncOptn.IconImageSource = null; } }
补充说明
如果需要iOS端也正常显示图标,可以先排查是否是图标资源的尺寸、命名不符合iOS平台规范导致的崩溃,确认无法兼容的情况下使用上述任一方案即可。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

