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 powoduUITextView
prywatne podklasyUITextPosition
iUITextRange
to ogromny ból w dupie, jeśli nie całkowicie niemożliwy.