2

我一直在做这样的事情

一切正常,直到我发现导致问题的字符串输入

存在问题的案例

输入字符串是“这是一个长标题sss \n Withssssssss”

基本上,“长”字似乎适合这个空间,但由于某种原因,它被绘制在下一行。

当我设置一个新的属性文本时,我总是以这种方式更新 textStorage

textStorage.setAttributedString(attributedText)

我的 UILabel 的子类调用

layoutManager.enumerateLineFragments(forGlyphRange: range) { (_, usedRect, _, glyphRange, _) in里面drawText(in rect:)

这里 glyphRange 返回location 0 and length 15第一个 LineFragments (直到 long ),矩形大小就是你在图片中看到的,因为它是我用来创建贝塞尔路径的那个。

这些是 TextKit 的所有对象的设置

let textContainer = NSTextContainer()
textContainer.heightTracksTextView = true
textContainer.lineFragmentPadding = 0

let layoutManager = NSLayoutManager()
layoutManager.usesFontLeading = false
layoutManager.allowsNonContiguousLayout = true

translatesAutoresizingMaskIntoConstraints = false
backgroundColor = .clear
lineBreakMode = .byCharWrapping
textContainer.lineBreakMode = lineBreakMode
layoutManager.addTextContainer(textContainer)
textStorage.addLayoutManager(layoutManager)
isUserInteractionEnabled = true

我什么都试过了。一些委托方法,将逻辑四处移动。我不明白为什么在下一行中绘制该字符串。

4

0 回答 0