我一直在做这样的事情。
一切正常,直到我发现导致问题的字符串输入
输入字符串是“这是一个长标题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
我什么都试过了。一些委托方法,将逻辑四处移动。我不明白为什么在下一行中绘制该字符串。