7

我正在尝试制作一个主要显示阿拉伯语内容的 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 中打开了文件,并使用了打开文件时出现的标题(简单工业阴影)。

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

注意:我为自定义英文字体做了同样的程序,它工作!...

4

2 回答 2

10

简短的回答

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

长答案

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

iOS 会自动对阿拉伯文本进行此预处理,但由于某种原因,它忘记了自定义字体,并且在呈现连接的字母时只使用系统默认字体。

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

解决方法

不过,如果您迫不及待,可以使用以下解决方法: 在渲染之前手动对文本进行预处理。这将允许跳过导致此问题的 iOS 预处理阶段,从而使用您的自定义字体呈现文本。

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

arabicLabel.text = @"ﺍﻟﺴﻼﻡ ﻋﻠﻴﻜﻢ";
于 2010-12-05T22:26:28.323 回答
2

此答案适用于 IOS 7 以下。

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

例如,如果我制作了一个 TTF 并使用 unicode 0627 映射了“و”,并且当我尝试查看键入的 unicode 0627 char ie 的效果时(当我键入“ا”时,它必须显示“و”)它不会应用我的自定义图像反对它,因为 ios6 不允许您更改特定范围内的字形。但是如果我将这个自定义字符映射到 Fxxx 系列或 0600-06ff 以外的其他字符,它将很容易让我进行自定义更改

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

这是使用自定义阿拉伯语类完成的类似类型的事情的链接,我也从中获得了帮助 阿拉伯语自定义字体类

于 2014-01-13T15:01:59.613 回答