TextKit - UILabel с фоном и интервалом - PullRequest
0 голосов
/ 01 июля 2018

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

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

Case where the issue is present

Строка ввода: «Это длинная бездетность \ n Withssssssss»

По сути, кажется, что "длинное" слово соответствует пробелу, но по какой-то причине оно рисуется в следующей строке.

Когда я устанавливаю новый атрибутный текст, я всегда обновляю textStorage таким образом

textStorage.setAttributedString(attributedText)

Мой подкласс UILabel вызывает

layoutManager.enumerateLineFragments(forGlyphRange: range) { (_, usedRect, _, glyphRange, _) in внутри drawText(in rect:)

Здесь glyphRange возвращает location 0 and length 15 для первых LineFragments (до тех пор, пока они не будут длинными), а размер прямоугольника - это то, что вы видите нарисованным на рисунке, потому что именно этот я использую для создания пути Безье.

Это настройки для всего объекта 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...