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

Delphi 11.2 IOS应用自定义样式文本颜色深色模式未切换求助

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:30:37