iOS中的自定义阿拉伯字体

时间:2010-09-11 15:36:03

标签: iphone fonts ios4 arabic custom-font

我正在尝试制作一个主要显示阿拉伯语内容的iphone应用程序。我想使用自定义阿拉伯字体来显示该内容,而不是iPhone默认的阿拉伯字体。我使用了以下代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    [arabicLabel setFont: [UIFont fontWithName: @"Simple Indust Shaded" size: 20]];
    arabicLabel.text = @"السلام عليكم";
}

其中arabicLabel是IBOutlet UILabel。我将标签放在App资源中,并将其作为UIAppFont数组项添加到info.plist文件中。字体也是Unicode

当我在模拟器上运行此代码时,标签显示默认的阿拉伯字体(不是我的自定义字体);但是如代码中所述,它将其大小设置为20!

我不明白我在这里做错了什么...我知道在info.plist文件中我必须添加带扩展名(ttf)的字体文件名,我就这样做了。另外,我知道在前面的代码中我不得不把实际的字体名称放在文件名中,所以我在Mac上打开了文件并使用了文件打开时出现的标题(Simple Indust Shaded)。

我错过了什么吗?除了Unicode之外,是否还有对自定义字体的额外要求?

注意:我对自定义英文字体执行了相同的操作,并且有效!...

2 个答案:

答案 0 :(得分:10)

简短回答

这似乎是iOS中的一个错误。

答案很长

您可能知道,阿拉伯语文本需要在呈现之前进行整形,这意味着将基本字母(Unicode:0600-06FF)转换为正确的相应上下文字母(Unicode:FE70-FEFF)。

iOS会自动为阿拉伯语文本执行此预处理,但出于某种原因,它会忘记自定义字体,并在呈现连接字母时使用系统默认字体。

所以,这是iOS中的一个错误,你应该等待它解决。

解决方法

但是,如果您等不及,可以使用此解决方法: 在呈现文本manually之前进行预处理。这将允许跳过iOS预处理阶段,这会导致此问题,从而使用您的自定义字体呈现文本。

如果您想测试此解决方案,只需复制以下行并在项目中尝试:

arabicLabel.text = @"ﺍﻟﺴﻼﻡ ﻋﻠﻴﻜﻢ";

答案 1 :(得分:2)

此答案仅适用于IOS 7。

我也经历过这种情况你可以创建自己的哈希映射方法,用你的自定义字体替换0600-06ff字符,但为此你需要检查TTF中的字形是否映射到0600-06FF而不是你需要修改你的字形映射的unicode,除了0600-06ff

例如,如果我制作了一个TTF并用unicode 0627映射'و',并且当我试图看到键入的unicode 0627 char的效果时(即当我输入'ا'它必须显示'و'时)它将不适用我的自定义图像,因为ios6不允许你更改特定范围内的字形。但如果我将这个自定义字符映射到Fxxx系列或0600-06ff之外,它将很容易让我进行自定义更改

阿拉伯语(0600-06FF,255个字符)u无法在此范围内播放或使用自定义图像更改这些字形图像的图像 所以将你的字形映射到下面的阿拉伯语unicode 阿拉伯文补编(0750-077F,48个字符) 阿拉伯语扩展-A(08A0-08FF,39个字符) 阿拉伯语演示表格-A(FB50-FDFF,608个字符) 阿拉伯语演示表格-B(FE70-FEFF,140个字符)

这里是使用自定义阿拉伯语类完成的相似类型的事情的链接,我也从中获得了帮助 arabic custom font class