UIButton框架尺寸无法随系统字体增大动态更新的问题
针对按钮文本随系统字体缩放但框架未同步更新的问题,可通过以下方式修复:
核心修复步骤
监听内容大小变化通知
系统字体调整时会发送UIContentSizeCategory.didChangeNotification通知,给按钮添加监听以触发尺寸重新计算:NotificationCenter.default.addObserver(skipButton, selector: #selector(UIButton.invalidateIntrinsicContentSize), name: UIContentSizeCategory.didChangeNotification, object: nil)字体变化时,按钮会重新计算
intrinsicContentSize,自动更新框架适配文本。调整内容边距
若按钮内容边距过小,文本放大后无法撑开按钮。可通过代码或界面编辑器设置合适边距:skipButton.contentEdgeInsets = UIEdgeInsets(top: 8, left: 16, bottom: 8, right: 16)验证动态字体创建逻辑
确保自定义字体方法返回支持动态缩放的字体。先改用系统标准方法测试:skipButton.titleLabel?.font = UIFont.preferredFont(forTextStyle: .body) skipButton.titleLabel?.adjustsFontForContentSizeCategory = true若此方法有效,说明自定义字体方法需调整,确保关联文本样式的动态特性。
优化约束优先级
你设置的宽高最小约束(48)优先级需低于按钮intrinsicContentSize的默认优先级(750)。可将最小约束优先级设为250(UILayoutPriorityDefaultLow),让按钮优先满足文本的尺寸需求。
额外检查项
- 若用Storyboard/XIB创建按钮,需勾选Title Label的
Adjusts Font For Content Size Category选项,且确保按钮依赖Auto Layout而非手动设置frame。
内容的提问来源于stack exchange,提问作者Shawn Frank
相关产品推荐
相关产品推荐

