Delphi 11.2 IOS应用自定义样式文本颜色深色模式未切换求助
以下是几个经过验证的实用解决方案,针对你遇到的自定义样式文本颜色未随iOS明暗模式自动切换的问题:
绑定系统颜色资源而非硬编码
自定义样式中的TText或TActiveStyleTextObject不要直接设置固定RGB颜色,而是通过Bind to Style功能关联iOS系统的动态颜色变量。比如在TextColor属性的下拉菜单中选择绑定到iOS.TextColor这类系统预设的样式颜色,这样系统切换模式时会自动同步颜色。手动配置深色样式的颜色映射
确保Style Book中同时包含IOS和IOS13 Dark两套样式,并且在项目选项(Project Options -> Application -> Appearance)中勾选Enable Dark Mode。对于自定义样式里的文本组件,需要在IOS13 Dark样式中手动设置对应的深色文本颜色——Delphi的自动颜色翻转仅对默认原生样式生效,自定义样式需要手动完成深色模式的颜色适配。代码层面监听模式切换并强制更新
通过监听系统模式变化事件,手动更新自定义样式的文本颜色。示例代码如下:uses FMX.Platform, FMX.Styles.ColorPalette; procedure TMainForm.UpdateCustomItemTextColor(AItem: TFmxObject); var LText: TText; LPaletteService: IFMXColorPaletteService; begin if AItem.FindStyleResource('text', LText) then begin if TPlatformServices.Current.SupportsPlatformService(IFMXColorPaletteService, LPaletteService) then begin case LPaletteService.GetCurrentPalette of TColorPalette.Dark: LText.TextColor := TAlphaColors.White; TColorPalette.Light: LText.TextColor := TAlphaColors.Black; end; end; end; end; // 在Form的OnCreate中注册监听 procedure TMainForm.FormCreate(Sender: TObject); var LPaletteService: IFMXColorPaletteService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXColorPaletteService, LPaletteService) then LPaletteService.OnPaletteChanged := procedure(Sender: TObject) begin // 遍历所有需要更新的ListBoxItem/TreeViewItem并调用更新方法 UpdateCustomItemTextColor(YourTargetListBoxItem); UpdateCustomItemTextColor(YourTargetTreeViewItem); end; end;确保自定义样式继承自基础iOS样式
创建自定义样式时,选择Inherit from对应的原生iOS样式(比如IOS.ListBoxItem或IOS.TreeViewItem),而非从零构建。这样自定义样式能继承基础样式的模式切换逻辑,仅覆盖你需要自定义的部分,避免丢失自动颜色切换的特性。清理样式缓存并重新编译
删除项目目录下iOS\Debug或iOS\Release中的缓存文件,执行Clean Project后重新编译部署。Delphi的样式缓存有时会导致修改不生效,清理后能确保新的样式配置被正确加载。
内容的提问来源于stack exchange,提问作者Rick Hollerich

