Для того, что, по-видимому, является "ошибкой", UITextView, похоже, не поддерживает кернинг, как другие элементы UIKit. Есть ли способ обхода работы кернинга?
Чтобы быть ясным, я говорю о промежутке между парами символов, которые определены в файле шрифта, а не общим интервалом между всеми символами. Использование NSAttributedString
с NSKernAttributeName
будет регулировать расстояние между всеми символами, но встроенные пары символов все равно не работают.
Пример:
Есть ли способ обхода проблемы?
Один простой обходной путь, который я обнаружил, - добавить стили css в UITextView, которые позволяют кернинг. Если я использую недокументированный метод setContentToHTMLString:
, я могу ввести css в секретный веб-просмотр в текстовом представлении.
NSString *css = @"*{text-rendering: optimizeLegibility;}";
NSString *html = [NSString stringWithFormat:@"<html><head><style>%@</style></head><body>Your HTML Text</body></html>", css];
[textView performSelector:@selector(setContentToHTMLString:) withObject:html];
Это немедленно устраняет проблему; однако, похоже, что это отклонит приложение. Есть ли безопасный способ прокрасить некоторые CSS в текстовое представление?
Другие методы, с которыми я экспериментировал, включают:
Использование веб-представления и контент-доступного свойства. Это не идеально, потому что веб-просмотр делает кучу лишних вещей, которые мешают, например, вид вспомогательного аксессуара, который нельзя скрыть.
Подклассификация a UITextView
и рендеринг текста вручную с помощью основного текста. Это сложнее, чем я надеялся, потому что все элементы выбора тоже нужно переконфигурировать. Из-за UITextView
частных подклассов UITextPosition
и UITextRange
это огромная боль в попке, если не совсем невозможно.