iOS 15系统UILabel使用Unicode软连字符\u{00AD}失效如何解决?
iOS 15 UILabel 软连字符
\u{00AD}不生效解决方案 失效原因
iOS 15 调整了 UILabel 的文本渲染逻辑,直接给text属性赋值普通字符串时,系统默认不会扫描处理软连字符标记,导致iOS 13、14上正常的实现版本失效。
修复方案
通过构造带段落属性的富文本显式开启连字符渲染即可,完整示例代码如下:
import UIKit class ViewController: UIViewController { @IBOutlet weak var label: UILabel! override func viewDidLoad() { super.viewDidLoad() let originalText = "Very\u{00AD}VeryVeryVeryVeryVeryLongWordWithASoftHyphenTo" // 配置段落属性,开启连字符规则 let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.hyphenationFactor = 1.0 paragraphStyle.lineBreakMode = .byWordWrapping // 生成富文本 let attributedText = NSAttributedString( string: originalText, attributes: [.paragraphStyle: paragraphStyle] ) // 给UILabel赋值富文本而非普通字符串 label.attributedText = attributedText label.numberOfLines = 0 } }
注意事项
- 必须通过
attributedText属性赋值富文本,直接赋值普通String给text属性无法触发软连字符处理 hyphenationFactor取值范围为0~1,数值越高系统优先使用连字符换行的概率越高,设置为1即可覆盖绝大多数场景- 软连字符仅在当前行宽度不足显示完整单词时才会显示为可见的短横线,宽度充足时会保持隐藏状态
修复后效果如下图:
内容的提问来源于stack exchange,提问作者Renato Stauffer
相关产品推荐
相关产品推荐

