我正在尝试创建可轻敲的标签,所以我想知道用户选择了哪个字符。为此,我使用了this solution,效果很好,但是多行标签和.byWordWrapping
还是有问题。
问题是,当我尝试在layoutManager
中重新创建文本rect时:
let layoutManager = NSLayoutManager()
layoutManager.addTextContainer(textContainer)
let textStorage = NSTextStorage(attributedString: attributedText)
textStorage.addLayoutManager(layoutManager)
let textBoundingBox = layoutManager.usedRect(for: textContainer)
除了一件小事,它可以按预期工作。
layoutManager.usedRect
并未试图消除所谓的孤儿/寡妇,但UILabel正是这样做的。正如您在这张图片上看到的,第二行中的单词是 wrap ,因为UILabel不想在那里有一个孤独的单词。
但是,如果我尝试使用NSMutableAttributedString
为此layoutManager.usedRect
重新计算文本rect,则此方法将忽略孤儿/寡妇,因此单词 wrap 将位于第一行
我不在乎孤儿,所以如果UILabel
也不会在乎他们(或者反之亦然,如果usedRect
会考虑他们的话,我会没事的,但是我不知道该怎么做。
是否可以解决?
P.S。我知道对这种行为使用UITextView
会更容易,实际上我已经尝试过并且可以使用,但是在这种情况下使用UITextView
对我来说似乎是错误的(我不需要可编辑的文字等)。