Однако, независимо от того, как я настраиваю свой текстовый контейнер, я всегда получаю возвращаемые все глифы/символы. Это мой тестовый код игровой площадки:
Код: Выделить всё
import UIKit
let height = 30
let width = 50
let text = "Dame Henrietta Barnett (1851-1936) was a social reformer and philanthropist known for her significant contributions to improving the lives of the urban poor in London during the late 19th and early 20th centuries. She is best known as the founder of Hampstead Garden Suburb, a pioneering model of urban planning that aimed to create a harmonious blend of town and country living."
let size = CGSize(width: width, height: height)
let textContainer = NSTextContainer(size: size)
textContainer.lineFragmentPadding = 0
textContainer.lineBreakMode = .byClipping
let layoutManager = NSLayoutManager()
layoutManager.addTextContainer(textContainer)
let font = UIFont.systemFont(ofSize: 18)
let attributes: [NSAttributedString.Key: Any] = [
.font: font,
]
let textStorage = NSTextStorage(string: text, attributes: attributes)
textStorage.addLayoutManager(layoutManager)
let glyphRange = layoutManager.glyphRange(for: textContainer)
let characterRange = layoutManager.glyphRange(forBoundingRect: CGRect(x: 0, y: 0, width: 1, height: 1), in: textContainer)
let visibleText = (text as NSString).substring(with: characterRange)
NSLog("Visible text: \(visibleText)")
Если я укажу ширину/высоту 0, диапазон будет равен 0, что делает смысл.
Примечание: я знаю, что с шириной и высотой он, вероятно, не должен возвращать какой-либо диапазон, я не понимаю, почему он это делает (указывая любой другой диапазон, например, w: 100, height: 40, также возвращает полный текст)
Я также пробовал использовать
Код: Выделить всё
let characterRange = layoutManager.characterRange(forGlyphRange: glyphRange, actualGlyphRange: nil)
используется версия Xcode: 16.0 beta 2
Подробнее здесь: https://stackoverflow.com/questions/786 ... er-only-ha
Мобильная версия