【发布时间】:2012-10-25 17:04:30
【问题描述】:
对于一个明显的“错误”,UITextView 似乎不像其他 UIKit 元素那样支持字距调整。是否有解决方法可以让字距调整工作?
为了清楚起见,我说的是字体文件中定义的字符对之间的间距,而不是所有字符之间的一般间距。使用 NSAttributedString 和 NSKernAttributeName 将调整所有字符之间的间距,但内置字符对仍然不起作用。
例如:
有解决办法吗?
我发现的一个简单的解决方法是将 css 样式添加到 UITextView 以启用字距调整。如果我使用未记录的方法 setContentToHTMLString: 我可以将 css 注入文本视图中的秘密 webview。
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 做了很多额外的事情,例如不容易隐藏的输入附件视图。
继承 UITextView 并使用核心文本手动呈现文本。这比我希望的要复杂,因为所有选择的东西也需要重新配置。由于UITextView 的UITextPosition 和UITextRange 的私有子类,即使不是完全不可能,这也是一个巨大的痛苦。
【问题讨论】:
-
你可以使用 NSAttributedStrings。仅当您需要 iOS6 时才有效。
-
好电话。我还忘了提到,由于“错误”字距调整不适用于 UITextView 中的 NSAttributedString。
-
当你说它是一个错误时,这是否意味着你已经在 bugreport.apple.com 上打开了雷达?
-
如果是这样,你能把它贴出来让我们欺骗吗?
-
您尝试的属性字符串是什么?在我的实验中,我能够为 kerning value 属性指定一个负值以将字母更多地切换在一起:[attributedString addAttribute:NSKernAttributeName value:[NSNumber numberWithFloat:-10] range:NSMakeRange(0, 3)];
标签: objective-c ios css uitextview kerning