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

MAUI iOS端Toolbar彩色图标显示为Shell.ForegroundColor颜色问题

问题解决:MAUI iOS端Toolbar彩色图标被转为白色

问题根源

iOS平台下,Shell默认会将ToolbarItem的图标应用Shell.ForegroundColor作为着色(Tint)颜色。你的配置中Default={StaticResource White},所以iOS端所有符合条件的图标都会被统一染成白色——彩色矢量图标会被完全覆盖,而灰度图标本身是单色调,着色后视觉上和原效果一致,所以看起来正常。

解决方案

方案1:改用位图格式的彩色图标

将彩色图标保存为带透明通道的PNG位图(不使用SVG矢量图)。iOS对彩色位图的默认渲染模式是保留原始色彩,不会应用Tint颜色,这样就能直接在Toolbar上显示原本的彩色。

方案2:自定义iOS渲染器保留矢量图标色彩

如果需要继续使用SVG矢量图,可以通过自定义渲染器修改图标的渲染模式,禁用Tint效果:

  1. 在iOS项目中创建自定义渲染器类:
using Microsoft.Maui.Controls.Platform.iOS;
using UIKit;

namespace YourAppNamespace.iOS.Renderers;

public class CustomToolbarItemRenderer : ShellToolbarItemRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Microsoft.Maui.Controls.ToolbarItem> e)
    {
        base.OnElementChanged(e);
        
        if (Control?.Image != null)
        {
            // 设置图片始终使用原始色彩,忽略Tint
            Control.Image = Control.Image.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal);
        }
    }
}
  1. 在MauiProgram.cs中注册该渲染器:
builder.ConfigureMauiHandlers(handlers =>
{
#if IOS
    handlers.AddHandler<Microsoft.Maui.Controls.ToolbarItem, YourAppNamespace.iOS.Renderers.CustomToolbarItemRenderer>();
#endif
});

方案3:单独调整iOS平台的Shell前景色(不推荐)

如果所有Toolbar图标都需要显示彩色,可以修改Shell.ForegroundColor的iOS专属配置:

<Setter Property="Shell.ForegroundColor" Value="{OnPlatform WinUI={StaticResource Primary}, iOS={StaticResource Transparent}, Default={StaticResource White}}" />

注意:此方法会影响Toolbar上的文字颜色,需要额外调整文字样式,因此不优先推荐。


内容的提问来源于stack exchange,提问作者programmerboy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:22:40