在 iOS 15 中,在 UILabel 中使用 unicode 字符时,软连字符无法正常工作

Ren*_*fer 10 uilabel soft-hyphen ios swift ios15

在 iOS 15 中,设置文本时不考虑软连字符 ( \u{00AD}UILabel ) 。例如:以下代码在 iOS 13 和 14 中正确渲染带有软连字符的文本,但在 iOS 15 中则不然。

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var label: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    label.text = "Very\u{00AD}VeryVeryVeryVeryVeryLongWordWithASoftHyphenTo"
  }
}
Run Code Online (Sandbox Code Playgroud)

结果: 在此输入图像描述

如何让 UILabel 考虑iOS 15 中的软连字符 ( \u{00AD} )?

小智 1

得到苹果公司对此的回应:

在 iOS 15 之前,我们严格遵循软连字符,而在 iOS 15 中我们现在只将它们视为连字符机会。

这就是设计,没有计划改变它。应用程序应该能够使用 languageIdentifier 属性来影响属性字符串的连字符,以便即使系统语言是英语,它也应该遵循德语连字符。

https://developer.apple.com/documentation/foundation/attributescopes/foundationattributes/3802173-languageidentifier

所以基本上现在我们应该使用 languageIdentifier 属性,我们自己的自定义连字符规则的机会较少(例如删除丑陋,一侧短,连字符中断),但语法正确。

软连字符仍然有效,但只是作为补充。