我的应用使用UITextView输入Syriac文本(Estrangelo字体),但是UITextView会像这样错误地呈现一些字母:
我用UILabel和UITextView测试了它。 UILabel正确显示它,但UITextView错误地显示顶部点并将它们移动到底部(参见上面的结果)。
此问题仅发生在iOS 7中,并且在iOS 6中不会发生。请告诉我是否有任何方法可以解决问题。
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
label.center = CGPointMake(self.view.center.x, self.view.center.y-40);
label.font = [UIFont fontWithName:@"East Syriac Adiabene" size:24];
label.text = @"ܩ̈ ܡ̄ ܬ̇ ܒ̃";
[self.view addSubview:label];
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
textView.center = CGPointMake(self.view.center.x, self.view.center.y+40);
textView.font = [UIFont fontWithName:@"East Syriac Adiabene" size:24];
textView.text = @"ܩ̈ ܡ̄ ܬ̇ ܒ̃";
[self.view addSubview:textView];
答案 0 :(得分:6)
我稍微调试了这个问题,它似乎是NSLayoutManager
布局文本的方式中的一个错误。正如其他答案所指出的,UITextView
是自iOS7以来围绕TextKit构建的,因此在内部使用NSLayoutManager
来布局文本。 UILabel
使用Core Text直接布局文本。两者最终都使用Core Text来渲染字形。
您应该向Apple打开一个错误报告并发布该号码,以便人们可以复制它。到目前为止,这个问题在iOS7.1测试版中尚未解决。
作为一种变通方法,您可以将UITextView
替换为其他Core Text替代编辑器,这些编辑器直接使用Core Text进行布局和渲染,但问题不存在。
我测试了SECoreTextView
,它正确显示了文字。它实现了与UITextView
类似的API,但内部使用了Core Text。
以下是UITextView
与SECoreTextView
交换后的展示方式:
SETextView *textView = [[SETextView alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
textView.center = CGPointMake(self.view.center.x, self.view.center.y+40);
textView.font = [UIFont fontWithDescriptor:desc size:24];
textView.text = @"ܩ̈ ܡ̄ ܬ̇ ܒ̃";
textView.textColor = [UIColor blackColor];
textView.backgroundColor = [UIColor whiteColor];
textView.editable = YES;
[self.view addSubview:textView];
答案 1 :(得分:2)
前几天,我在iOS 7
中遇到了与您相同的问题(但字体不同) 。
我在设置 TEXT 后设置 FONT ,它对我有用。所以对于你的情况:
textView.text = @"ܩ̈ ܡ̄ ܬ̇ ܒ̃"; // Setting the text.
textView.font = [UIFont fontWithName:@"East Syriac Adiabene" size:24]; // Setting the font and it's size.
看起来很傻,但它对我有用。
另见question/answer。使用UITextView
的自定义字体有很多提示,这可能会对您有所帮助。
编辑:
iOS 7还在selectable
上引入了新的UITextView
属性,用于启用文本选择。因此,请确保您已完成以下操作:
self.textField.editable = YES;
self.textField.selectable = ON;