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

iOS Swift:UIAlertController的maximumContentSizeCategory失效,如何设置最大动态字体?

解决UIAlertController最大动态字体大小不生效的问题

直接设置alertController.view.maximumContentSizeCategory无效的核心原因是:UIAlertController的内部文本控件(标题标签、按钮标题标签)不会自动继承父容器视图的该属性,必须单独为这些子控件配置最大内容尺寸类别。

可行方案:遍历子视图设置属性

  1. 先给UIView添加一个遍历子视图的扩展,方便递归查找所有内部控件:
extension UIView {
    func traverseSubviews(_ handler: (UIView) -> Void) {
        handler(self)
        subviews.forEach { $0.traverseSubviews(handler) }
    }
}
  1. 创建并配置UIAlertController时,遍历其所有子视图,为文本类控件设置最大内容尺寸:
let alertController = UIAlertController(title: "Test", message: nil, preferredStyle: .actionSheet)
alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel))

// 遍历所有子视图,为标签和按钮标题设置最大动态字体限制
alertController.view.traverseSubviews { view in
    if let label = view as? UILabel {
        label.maximumContentSizeCategory = .extraExtraExtraLarge
    } else if let button = view as? UIButton {
        button.titleLabel?.maximumContentSizeCategory = .extraExtraExtraLarge
    }
}

present(alertController, animated: true, completion: nil)

补充说明

  • 该方法同时适用于.alert和.actionSheet两种样式的UIAlertController。
  • 避免子类化UIAlertController(苹果官方不推荐这种做法),遍历子视图是更安全的替代方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:55:18