Closed PeiYanDong closed 1 year ago
Wiki 文档里已有说明,这是系统行为:
在 App 回到后台的时候,系统会分别使用 Light Mode 和 Dark Mode 为 App 当前界面截两张图,从而保证你切换了主题后再唤醒 App,不会看到颜色跳变的过程
Wiki 文档里已有说明,这是系统行为:
在 App 回到后台的时候,系统会分别使用 Light Mode 和 Dark Mode 为 App 当前界面截两张图,从而保证你切换了主题后再唤醒 App,不会看到颜色跳变的过程
这会有个问题,外部调用的地方不知道是否真的在切换皮肤,会导致外部的方法,无意义的走两遍,有的涉及到UI的地方也会重新渲染两边,我们这边webview会调用reload方法导致页面产生位移偏差,可以通过是否在后台来屏蔽回调的,进入后台的通知回调,是在皮肤回调之前的,我测试先进入后台,在切换皮肤,进入前台时仍会有皮肤更改的回调的
通常来说,调用n次都不应该会有问题,因为业务必须保证每一次调用都不会产生副作用。建议从业务角度去解决这个问题。 因为 theme 切换可以认为是随时可能频繁发生的事情,这是业务需要去适配它的,而不是 theme 实现原理去兼容业务(也兼容不了,因为这是系统行为,不是 QMUI 控制的)。
例如: APP换肤选择跟随系统,当前是白皮肤,切换前后台时,UITraitCollection分类会先返回黑皮肤,在返回白皮肤,实际并没有切换皮肤,不应该有回调
预期的表现 跟随系统皮肤时,切换前后台,不切换皮肤,不应该回调皮肤变化
代码定位: UITraitCollection分类的_qmui_overrideTraitCollectionMethodIfNeeded方法
建议: 建议和 [UITraitCollection currentTraitCollection].userInterfaceStyle比对后再返回