TextKit — UILabel с фоном и интервалом

Я работал над чем-то вроде этого.

Все работало нормально, пока я не обнаружил ввод строки, который вызывает проблему

Случай, когда проблема присутствует

Входная строка: «Это длинное titlessss\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

Я пробовал все. Некоторые методы делегирования, перемещающие логику повсюду. Я не могу понять, почему эта строка рисуется в следующей строке.


person ndPPPhz    schedule 01.07.2018    source источник
comment
Вы пытались написать свой текст в UITextView вместо UILabel?   -  person XLE_22    schedule 09.12.2019