Изменение свойства межстрочного интервала в NSPagraphStyle вызывает удлинение курсора

У меня есть подкласс UITableViewCell, который содержит UITextView. Я добавил NSParagraphStyle в качестве атрибута строки в подклассе NSTextStorage. В следующем коде я увеличил расстояние между каждой строкой в ​​UITextView.

быстро

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 11
myCustomTextStorage.appendAttributedString(NSAttributedString(string: someText, attributes: [NSParagraphStyleAttributeName: paragraphStyle]))

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

введите здесь описание изображения

Я просмотрел несколько сообщений на SO по этой проблеме, включая этот пост ; однако ни одно из предложенных решений, похоже, не работает для меня.

Я прочитал документацию TextKit, но не нашел решения этой проблемы.

Есть ли способ уменьшить высоту курсора?


person akamas    schedule 17.04.2015    source источник


Ответы (2)


Это работает так, как задумано, и то же самое на Mac. Он предназначен для предоставления пользователю визуальной обратной связи о том, на какой строке он находится, и о высоте этой строки. Вы должны хорошо подумать, прежде чем менять это только потому, что вам не нравится, как это выглядит.

Тем не менее, метод в сообщении SO, на которое вы ссылались выше, является общим подходом к настройке курсора (хотя может также потребоваться корректировка источника скорректированного прямоугольника). Что насчет того, что это не сработало для вас? Было бы лучше начать оттуда.

person Joshua Nozzi    schedule 04.11.2015
comment
Я бы сказал, что это не работает так, как задумано. Если точка курсора должна показывать высоту строки, но вы настраиваете ИНТЕРВАЛ между строками, то он неправильно показывает высоту строки. Вы можете увидеть это, если вы настроите MinimumLineHeight на что-то большое, курсор начинается с нижней части текста и поднимается до верхней части строки, что имеет смысл. Но если вы увеличите межстрочный интервал, курсор не должен опускаться ниже текста в интервал, поскольку он не является частью строки. - person jeffjv; 08.12.2018
comment
@jeffjv Тогда найдите время, чтобы отправить этот аргумент в качестве отчета об ошибке в Apple. Я не проектировал это. - person Joshua Nozzi; 12.12.2018

ответ, связанный с этой проблемой, дан в этой теме. просто вставить сюда для дальнейшего использования. iOS - LineSpacing UITextView делает высоту курсора не одинаковой

«вы можете изменить высоту курсора, создав подкласс UITextView, а затем переопределить функцию caretRectForPosition:position. Например:

  • (CGRect)caretRectForPosition:(UITextPosition *)position { CGRect originalRect = [super caretRectForPosition:position]; originalRect.size.height = 18,0; вернуть исходный прямоугольник; } "
person Moaz Saeed    schedule 14.01.2016