Kerning no iOS UITextView
Para o que aparentemente é um 'bug', o UITextView parece não suportar o kerning como outros elementos do UIKit. Existe uma solução para obter o kerning funcionando?
Para ser claro, estou falando sobre o espaçamento entre pares de caracteres que são definidos no arquivo de fonte, não o espaçamento geral entre todos os caracteres. Usando umNSAttributedString
com oNSKernAttributeName
ajustará o espaçamento entre todos os caracteres, mas os pares de caracteres internos ainda não funcionam.
Por exemplo:
Existe uma solução para corrigir isso?
Uma solução simples que descobri é adicionar estilos css ao UITextView, que habilitam o kerning. Se eu usar o método não documentadosetContentToHTMLString:
Eu posso injetar o css na visualização da Web secreta dentro da exibição de texto.
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];
Isso corrige o problema imediatamente; no entanto, parece muito provável que esse aplicativo seja rejeitado. Existe uma maneira segura de inserir alguns css na exibição de texto?
Outras soluções alternativas que experimentei incluem:
Usando uma visualização da Web e a propriedade contenteditable. Isso não é ideal porque o webview faz um monte de coisas extras que ficam no caminho, por exemplo, a visualização de acessório de entrada que não pode ser facilmente ocultada.
Subclassificando umUITextView
e renderizar texto manualmente com o texto principal. Isso é mais complexo do que eu esperava, porque todas as coisas selecionadas precisam ser reconfiguradas também. Por causa deUITextView
subclasses privadas deUITextPosition
eUITextRange
isso é uma enorme dor no rabo, se não completamente impossível.