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

iOS12运行自定义UILabel报错 boldColor不符合键值编码规范

问题原因
  • 核心原因是你给只读计算属性boldColor 添加了@IBInspectable修饰。iOS 12的Interface Builder解析逻辑会尝试通过KVC对所有@IBInspectable修饰的属性赋值,但只读计算属性没有实现setter方法,就会触发NSUnknownKeyException崩溃。iOS 13及以上系统对只读的@IBInspectable属性做了兼容处理,不会主动赋值,所以运行正常。
  • 次要隐患:boldColor中用到的userInterfaceStyle是iOS 13才推出的API,iOS 12设备调用会触发找不到selector的崩溃,这个问题在你修复第一个异常后就会暴露。
解决步骤
  1. 移除boldColor的@IBInspectable修饰。这个属性是内部用来动态适配暗黑模式颜色的,不需要在IB面板中配置,完全没必要加这个修饰符。
  2. 给暗黑模式相关的代码加上系统版本判断,iOS 12及以下版本没有暗黑模式,直接返回浅色模式对应的颜色即可。

修改后的boldColor参考代码:

// 去掉@IBInspectable修饰
var boldColor: UIColor {
    if #available(iOS 13.0, *) {
        return traitCollection.userInterfaceStyle == .light ? .black : .white
    } else {
        // iOS12及以下没有暗黑模式,直接返回浅色模式颜色
        return .black
    }
}

额外提醒:你代码里的fontSize、fontType也是加了@IBInspectable修饰的只读计算属性,同样会在iOS 12设备上触发崩溃,建议一起移除对应的@IBInspectable修饰,不需要在IB配置的属性不要加该修饰符。如果确实需要暴露到IB面板配置,就把属性改成带默认值的存储属性即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:45:05