You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:24:01