部署目标低于15.0时UIButton清掉Attribute Inspector的title仍显示Button如何解决
可行解决方案
方案1:修改Interface Builder配置(无代码改动)
- 打开对应Xib/Storyboard文件,选中存在问题的UIButton
- 在右侧Attribute Inspector中找到
Style配置项,将默认的Plain修改为Default - 再次清空
Title输入框的内容后重新运行即可
该方案改动最小,适合单个或少量按钮出现问题的场景。
方案2:代码主动清空标题(兼容性最高)
在按钮所在视图控制器的viewDidLoad方法中添加代码主动置空标题:
// Swift 示例 yourButton.setTitle("", for: .normal)
// Objective-C 示例 [self.yourButton setTitle:@"" forState:UIControlStateNormal];
该方案不受Xcode版本、部署目标版本影响,不会出现兼容问题。
方案3:批量修复(适合多按钮场景)
如果项目中存在大量同问题按钮,可以通过Category/Extension全局修复:
// Swift 示例 extension UIButton { static func fixIBDefaultTitleBug() { guard #available(iOS 15.0, *) else { let originalSel = #selector(UIButton.init(coder:)) let swizzledSel = #selector(UIButton.fix_init(coder:)) // 此处补充方法交换的实现代码,在App启动时调用该方法即可 } } @objc private func fix_init(coder: NSCoder) -> UIButton? { let btn = self.fix_init(coder: coder) btn?.setTitle("", for: .normal) return btn } }
注:方法交换存在一定风险,仅建议确认项目需要批量修复时使用。
问题根因说明
该问题是Xcode 13+的Interface Builder兼容缺陷:Xcode 13开始默认给UIButton启用iOS 15新增的Plain样式,当项目部署目标低于iOS 15时,IB会自动降级到旧版按钮实现,但清空Title的操作没有同步写入旧版按钮的title属性,导致保留了默认的"Button"文本。
内容的提问来源于stack exchange,提问作者Akash S Arjun
相关产品推荐
相关产品推荐

