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

Swift5 UIButton带normal状态图片跳转URL后Xcode12编译版本返回卡顿

问题根因

这是Xcode 12 使用iOS 14 SDK编译时的已知特性bug,触发条件为:UIButton仅配置了.normal状态的图标,未显式配置其他状态(.highlighted/.selected/.disabled)的图标时,应用从外部跳转回前台的过程中,UIKit会触发无意义的图标反复渲染逻辑,阻塞主线程导致应用无响应,Xcode 10用旧版SDK编译时没有这个逻辑所以不会触发问题。

可行解决方案(均不影响原有.normal状态配置,也无需替换为背景图)

  1. 复用normal状态图标补全其他状态配置
    直接在按钮初始化闭包中补充高亮、选中状态的图标配置,复用normal状态的图标即可,原有交互逻辑完全不变:
let buttonWA: UIButton = {
    let v = UIButton()
    v.imageView?.contentMode = .scaleAspectFit
    let normalImg = UIImage(named: "ic_whatsapp")
    v.setImage(normalImg, for: .normal)
    // 补充以下两行即可
    v.setImage(normalImg, for: .highlighted)
    v.setImage(normalImg, for: .selected)
    return v
}()

按钮的高亮效果(默认的图标透明度降低)会由系统自动生成,和原有交互表现完全一致,同时也保留了你设置的scaleAspectFit缩放规则。

  1. 关闭按钮自动调整图标属性
    如果不需要系统默认的高亮透明度效果,可以直接关闭按钮的自动调整图标开关,从根源避免渲染逻辑触发:
let buttonWA: UIButton = {
    let v = UIButton()
    v.imageView?.contentMode = .scaleAspectFit
    v.setImage(UIImage(named: "ic_whatsapp"), for: .normal)
    // 补充以下两行即可
    v.adjustsImageWhenHighlighted = false
    v.adjustsImageWhenDisabled = false
    return v
}()

以上两个方案任选其一即可解决跳转返回卡顿的问题,不需要修改你的跳转逻辑和原有normal状态的配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:51:04