明らかに「バグ」と思われるものについては、UITextView は他の UIKit 要素のようにカーニングをサポートしていないようです。カーニングを機能させるための回避策はありますか?
明確にするために、すべての文字間の一般的な間隔ではなく、フォント ファイルで定義されている文字のペア間の間隔について話しているのです。を とともに使用するNSAttributedString
と、NSKernAttributeName
すべての文字間の間隔が調整されますが、組み込みの文字ペアはまだ機能しません。
例えば:
これを修正する回避策はありますか?
私が見つけた簡単な回避策の 1 つは、カーニングを有効にする CSS スタイルを UITextView に追加することです。文書化されていない方法を使用するとsetContentToHTMLString:
、css をテキスト ビュー内の秘密の Web ビューに挿入できます。
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 をテキストビューに忍び込ませる安全な方法はありますか?
私が実験した他の回避策には、次のものがあります。
webview と contenteditable プロパティを使用します。これは理想的ではありません。webview は、簡単に非表示にできない入力アクセサリ ビューなど、邪魔になる余分なものをたくさん処理するからです。
a をサブクラス化し、UITextView
コア テキストを使用してテキストを手動でレンダリングします。すべての選択項目も再構成する必要があるため、これは私が望んでいたよりも複雑です。UITextView
の とのプライベート サブクラスのため、完全に不可能ではないにしても、これはお尻の大きな痛みですUITextPosition
。UITextRange