如何创建可点击的UILabel(孤儿问题)

时间:2019-12-21 17:26:54

标签: swift uilabel nslayoutmanager

我正在尝试创建可轻敲的标签,所以我想知道用户选择了哪个字符。为此,我使用了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不想在那里有一个孤独的单词。

wrapping example

但是,如果我尝试使用NSMutableAttributedString为此layoutManager.usedRect重新计算文本rect,则此方法将忽略孤儿/寡妇,因此单词 wrap 将位于第一行

我不在乎孤儿,所以如果UILabel也不会在乎他们(或者反之亦然,如果usedRect会考虑他们的话,我会没事的,但是我不知道该怎么做。

是否可以解决?

P.S。我知道对这种行为使用UITextView会更容易,实际上我已经尝试过并且可以使用,但是在这种情况下使用UITextView对我来说似乎是错误的(我不需要可编辑的文字等)。

0 个答案:

没有答案