Пользовательский арабский шрифт в iOS

Я пытаюсь сделать приложение iphone, которое отображает в основном содержимое на арабском языке. Я хочу использовать собственный арабский шрифт для отображения этого контента, а не шрифта по умолчанию для iPhone по умолчанию. Я использовал следующий код:

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

где arabicLabel является IBIutlet UILabel. Я помещал ярлык в ресурсы приложения и добавлял его в файл info.plist как элемент массива UIAppFont. Также шрифт – Unicode .

Когда я запускаю этот код на симуляторе, на этикетке отображается арабский шрифт по умолчанию (не мой пользовательский шрифт); однако он установил свой размер до 20, как указано в коде!

Я не понимаю, что я сделал неправильно здесь … Я знаю, что в файле info.plist я должен добавить имя файла шрифта с расширением (ttf), и я сделал это. Кроме того, я знаю, что в предыдущем коде мне пришлось поставить фактическое имя шрифта не имя файла, поэтому я открыл файл на своем Mac и использовал заголовок, который появился при открытии файла (Simple Indust Shaded).

Я что-то упускаю? Существуют ли дополнительные требования к пользовательским шрифтам, кроме Unicode?

NB: Я сделал ту же процедуру для пользовательского английского шрифта, и это сработало! …

Короткий ответ

Кажется, это ошибка в iOS.

Длительный ответ

Как вы, возможно, знаете, арабский текст должен быть сформирован, прежде чем он может быть отображен, что означает преобразование основных букв ( Unicode: 0600-06FF ) в соответствующие соответствующие контекстные буквы ( Unicode: FE70-FEFF ).

iOS делает эту предварительную обработку автоматически для арабского текста, но по какой-то причине он забывает о пользовательском шрифте и просто использует стандартный шрифт по умолчанию, когда он отображает связанные буквы.

Итак, это ошибка в iOS, и вы должны дождаться ее решения.

Временное решение

Хотя, если вы не можете ждать, вы можете использовать это обходное решение: выполните предварительную обработку текста вручную перед его рендерингом . Это позволит пропустить фазу предварительной обработки iOS, которая вызывает эту проблему и, таким образом, визуализирует текст с использованием пользовательского шрифта.

Если вы хотите протестировать это решение, просто скопируйте эту следующую строку и попробуйте в своем проекте:

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

ЭТО ОТВЕТ ДЛЯ НИЖЕ IOS 7.

Я также пережил эту ситуацию, и вы можете создать свой собственный метод хеш-карты для замены char 0600-06ff с урским шрифтом, но для этого вам нужно проверить, сопоставлен ли ваш глиф в TTF против 0600-06FF, чем вам нужно изменить ur glyph, отображаемый unicode, за исключением 0600-06ff

например, если я сделал TTF и сопоставил «و» с unicode 0627, и когда я пытаюсь увидеть эффект типизированного символа юникода 0627, т. е. (когда я набираю «ا», он должен показывать «و»), он не будет применять мое пользовательское изображение против него, потому что ios6 не позволит вам изменять глиф в определенном диапазоне. но если бы я сопоставил этот пользовательский символ с серией Fxxx или иначе, чем с 0600-06ff, он легко разрешил бы мне внести пользовательские изменения

Арабский (0600-06FF, 255 символов) u не может воспроизводить на этом диапазоне или изменять изображение этого изображения с вашим пользовательским изображением, поэтому сопоставил ваш глиф с арабским дополнением арабского алфавита (0750-077F, 48 символов). Арабский расширенный-A (08A0-08FF, 39 символов). Арабские формы презентации-A (FB50-FDFF, 608 символов). Арабские формы презентации-B (FE70-FEFF, 140 символов)

вот ссылка для аналогичного типа вещей, выполненная с использованием пользовательского classа arabic, и я также взял на себя помощь от этого абразивного пользовательского classа шрифтов

Interesting Posts

Добавление базы данных SQLite в приложение для iPhone

Как создать zip / tgz в Linux, чтобы у Windows были правильные имена файлов?

Получать записи с наивысшим / наименьшим к каждой группе

Как мы можем показать индикатор выполнения для загрузки с помощью FtpWebRequest

Вызов веб-служб REST с classической страницы asp

Каков наилучший способ настройки паролей, не имея их слишком легко доступным для обычного читателя?

Создать% от нефильтрованного итога в Excel

Word: как показать скрытые вкладки ленты?

AngularJS – привязка переключателей к моделям с булевыми значениями

Отладка приложения при запуске путем Push-уведомления

Как узнать использование памяти моего приложения в Android?

Не удается включить Windows Hello. Некоторые настройки управляются вашей организацией.

DataView.Sort – больше, чем просто asc / desc (требуется индивидуальная сортировка)

Слишком много оперативной памяти "в кеше"

Поиск простого кэша Java в памяти

Давайте будем гением компьютера.