NSLayoutManager boundingRect (forGlyphRange: in :) возвращает неправильное значение для языков RTL - PullRequest
0 голосов
/ 12 января 2019

В моем приложении я рисую собственный фон под строками текста в UITextView. Для этого я использую boundingRect(forGlyphRange:in:) метод NSLayoutManager. Хорошо работает для языков LTR (латинский, кириллица, китайский и т. Д.): enter image description here Но если я использую его для текстов RTL (иврит, фарси и т. Д.), Метод возвращает неправильный ограничивающий прямоугольник (см. Отступы на левом краю): enter image description here

Кажется, что эти дополнительные отступы имеют некоторую логику. Первый символ определяет размер отступа для строки: enter image description here

В чем причина такого дополнительного заполнения и как получить правильный ограничивающий прямоугольник?

Вот демоверсия: https://www.dropbox.com/s/bpsr7bhhd7gqm2z/hebrew.zip?dl=0

UPD: похоже, эта функция дает неверный результат для всех алфавитов, которые используют, я не знаю, как она называется, мутирующие символы. Деванагари, например:

enter image description here

1 Ответ

0 голосов
/ 13 января 2019

Кажется boundingRect(forGlyphRange:in:) считает ровно глифы с их пробелами для присоединения соседних символов, но не последний составной фрагмент текста, который дает дополнительные отступы.

enter image description here

Я решил свою проблему, но использовал boundingRect функцию NSString. Проверьте результат: https://www.dropbox.com/s/qq5lmo8fsozjqml/hebrew%202.zip?dl=0

...