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

Swift 4升级后UIAlertController消息全部变为单行问题求助

解决Swift4升级后UIAlertController消息单行显示的问题

嘿,我之前也踩过这个坑!升级到Swift4之后,UIAlertController的消息文本确实会莫名变成单行带省略号,明明之前是正常自动换行的。给你两个实用的解决办法:

方法一:使用富文本设置消息(推荐)

这是更稳妥的官方兼容方式,通过给alert设置attributedMessage来让文本自动换行,不需要手动加\n:

// 假设yourAPIMessage是从接口获取的长文本
let alert = UIAlertController(title: "提示标题", message: "", preferredStyle: .alert)

// 创建富文本,设置自动换行的段落样式
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineBreakMode = .byWordWrapping
let attributedMsg = NSAttributedString(
    string: yourAPIMessage,
    attributes: [.paragraphStyle: paragraphStyle]
)

// 给alert设置富文本消息
alert.setValue(attributedMsg, forKey: "attributedMessage")

// 添加按钮并弹出alert
alert.addAction(UIAlertAction(title: "确定", style: .default))
self.present(alert, animated: true)

方法二:手动修改消息标签的换行属性(临时救急)

这个方法有点“hack”,因为是直接遍历alert的子视图找到消息标签,但在Swift4对应的iOS版本里是有效的:

let alert = UIAlertController(title: "提示标题", message: yourAPIMessage, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "确定", style: .default))

self.present(alert, animated: true) {
    // 遍历子视图找到消息对应的UILabel
    if let messageLabel = alert.view.subviews.first?
        .subviews.first?
        .subviews.first(where: { $0 is UILabel }) as? UILabel {
        messageLabel.numberOfLines = 0
        messageLabel.sizeToFit()
        // 触发布局更新适配文本高度
        alert.view.layoutIfNeeded()
    }
}

补充说明

Swift4升级后UIKit对UIAlertController的内部布局做了调整,默认的消息标签被设置成了numberOfLines = 1,所以原本的自动换行失效了。优先用方法一,因为方法二依赖于alert的内部视图结构,后续iOS版本更新可能会失效哦。

内容的提问来源于stack exchange,提问作者Batuhan C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:05:47