UILabel 自动跟系统深色模式变色导致bug(UIDynamicCatalogSystemColor)

今天遇到了一个 UILabel 的 textColor 自动跟肤的问题, 复现路径是

  1. 打开出问题页面, 文字显示黑色, 显示正常
  2. 从手机屏幕右上角下滑, 在屏幕亮度中打开”深色模式”, 回到 app
  3. 原本显示黑色的 UILabel 就变成了白色

由于业务比较复杂, 我直接用符号断点去看哪个业务做的这个颜色的修改, 诡异的是在 Xcode 打符号断点 -[UILabel setTextColor:] 居然捕获不到这次变色, 说明并不是业务层代码主动去改的颜色.

尝试打印 UILabel.textColor, 结果是 UIDynamicCatalogSystemColor, 似乎没见过, 估计是 UIColor 的私有子类, 尝试 Google, 没有明显有用的结果, 换 ChatGPT 吧, 结果如下:

UIDynamicCatalogSystemColor 是 iOS 中的一种动态颜色系统,它允许开发者根据用户界面样式的变化而自动调整颜色。这种系统颜色在不同的外观模式下(比如浅色和深色模式)能够自动适应并改变外观,以便更好地适应用户的偏好设置。

而之前打的符号断点也能显示出, UILabel 初始化的时候, 会自动将 textColor 设置成UIDynamicCatalogSystemColor, 即自动根据系统深色模式调整 textColor, 后面我们的业务代码由于某些原因再也没有设置过 textColor, 所以就自动变色导致 bug.

解决办法, UILabel 初始化之后设置默认的 textColor 即可.

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道