Kerning w iOS UITextView

Dla tego, co najwyraźniej jest „błędem”, UITextView nie wydaje się obsługiwać kerningu jak inne elementy UIKit. Czy istnieje obejście problemu pozwalające na działanie kerningu?

Żeby było jasne, mówię o odstępach między parami znaków, które są zdefiniowane w pliku czcionki, a nie o ogólnych odstępach między wszystkimi znakami. Korzystanie zNSAttributedString zNSKernAttributeName dostosuje odstępy między wszystkimi znakami, ale wbudowane pary znaków nadal nie działają.

Na przykład:

Czy istnieje rozwiązanie tego problemu?

Jedno proste obejście, które odkryłem, to dodanie stylów css do UITextView, które umożliwiają kerning. Jeśli korzystam z nieudokumentowanej metodysetContentToHTMLString: Mogę wstrzyknąć css do tajnego widoku w widoku tekstowym.

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];

To natychmiast rozwiązuje problem; wydaje się jednak bardzo prawdopodobne, że aplikacja zostanie odrzucona. Czy istnieje bezpieczny sposób, aby przekraść css do widoku tekstu?

Inne obejścia, z którymi eksperymentowałem, obejmują:

Korzystanie z przeglądarki internetowej i właściwości, które można wykorzystać. Nie jest to idealne rozwiązanie, ponieważ webview robi wiele dodatkowych rzeczy, które przeszkadzają, na przykład widok akcesoriów wejściowych, których nie można łatwo ukryć.

Podklasa aUITextView i renderowanie tekstu ręcznie za pomocą tekstu podstawowego. Jest to bardziej skomplikowane, niż się spodziewałem, ponieważ wszystkie elementy selekcji muszą być również ponownie skonfigurowane. Z powoduUITextViewprywatne podklasyUITextPosition iUITextRange to ogromny ból w dupie, jeśli nie całkowicie niemożliwy.

questionAnswers(6)

yourAnswerToTheQuestion