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.
相关产品推荐
相关产品推荐

