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

10

iOS 15 中在 UILabel 上设置文本时,不会考虑到软连字符 (\u{00AD})。例如:下面的代码在 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"
  }
}

结果: 在此输入图片描述

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


这在iOS之前的版本和iOS 15之间不应该有任何区别。只是出于好奇,你的UILabel的lineBreakMode是什么?(如果将其设置为“byWordWrapping”,行为是否会改变) - Scott Thompson
似乎在iOS 15上您确实有一个连字符,但它位于“Soft”和“HyphenTo”之间的另一个位置。正如其他人所说,这可能是配置问题吗? - Cristik
@ScottThompson 我已经设置了默认值:byTruncatingTail。我刚刚尝试了byWordWrapping,但结果相同。 - Renato Stauffer
6
我已经向苹果开启了技术支持事件(TSI),他们告诉我需要在反馈助手中开启漏洞报告。我会尽快更新答复/获取更多信息。 - Renato Stauffer
你好!你收到苹果的回复了吗?我的应用程序也遇到了同样的错误,它是多语言的,并且在一个屏幕上可能有几个不同的语言文本。但是在iOS 15中,如果字符串中有软连字符Unicode符号,则系统会根据首选语言规则自动添加连字符,显然,如果单词是德语而系统语言是英语,则这些连字符是错误的。我也提交了TSI工单,但也许你有相关的消息?因为在iOS 15中,除了系统首选语言之外,似乎没有办法进行正确的连字化。 - Ivan Barabanshchykov
显示剩余5条评论
1个回答

1

这个问题我们已经收到了苹果的回复:

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

这是设计上的考虑,并且没有计划更改。应用程序应该能够使用languageIdentifier属性来影响带属性字符串的断字,以便即使系统语言为英语,也应该遵循德语断字规则。

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

因此,现在我们应该使用languageIdentifier属性,少一些自定义断字规则的机会(例如删除丑陋、单边短的断字),但可以正确地符合语法。

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


我得到了基本相同的答案。现在似乎是默认行为。 - Renato Stauffer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接