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效果:
- 在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); } } }
- 在
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
相关产品推荐
相关产品推荐

