Только что обновил свой iPod touch до iOS 7.0.3, и "HelveticaNeue-Italic", похоже, исчез. Когда я спрашиваю по телефону:
[UIFont fontNamesForFamilyName:@"Helvetica Neue"]
Я получаю следующие fontNames (13):
HelveticaNeue-BoldItalic,
HelveticaNeue-Light,
HelveticaNeue-UltraLightItalic,
HelveticaNeue-CondensedBold,
HelveticaNeue-MediumItalic,
HelveticaNeue-Thin,
HelveticaNeue-Medium,
HelveticaNeue-ThinItalic,
HelveticaNeue-LightItalic,
HelveticaNeue-UltraLight,
HelveticaNeue-Bold,
HelveticaNeue,
HelveticaNeue-CondensedBlack
Когда я выполняю тот же запрос в симуляторе, я получаю (14):
HelveticaNeue-BoldItalic,
HelveticaNeue-Light,
**HelveticaNeue-Italic,**
HelveticaNeue-UltraLightItalic,
HelveticaNeue-CondensedBold,
HelveticaNeue-MediumItalic,
HelveticaNeue-Thin,
HelveticaNeue-Medium,
HelveticaNeue-Thin_Italic,
HelveticaNeue-LightItalic,
HelveticaNeue-UltraLight,
HelveticaNeue-Bold,
HelveticaNeue,
HelveticaNeue-CondensedBlack
Кто-нибудь еще это видел?
---- Новая информация ----
Я вернулся к видео WWDC 2013 «Использование шрифта с текстовым набором», и самое интересное начинается в 12:22. В качестве примера докладчик рассказывает о "MetaFonts" в OS X. Он говорит, что шрифт под заголовками вроде:
+ (NSFont *)messageFontOfSize:(CGFloat)fontSize
не гарантируется возврат одного и того же базового шрифта в разных версиях или даже в разных вариантах использования. Его примером была Люсинда Гранде. Похоже, он не говорил, что использование HelveticaNeue-Italic может переходить от версии к версии.
Итак, я провел эксперимент в iOS 7. Я создал свой шрифт с помощью следующего кода:
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:@"Helvetica Neue" size:16.0];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
UIFont *fontWithDescriptor = [UIFont fontWithDescriptor:symbolicFontDescriptor size:16.0];
Я получил обратно действительный UIFont для fontWithDescriptor, и когда я запросил шрифт для fontName с помощью:
[fontWithDescriptor fontName]
Я вернулся...
HelveticaNeue-Italic
Иди разберись ???
Таким образом, возможным ответом на 7.0.3 является приведенный выше код.
---- Дальнейшая настройка ----
Хотя вышеприведенное решение сработало, я не считаю его формально правильным. Я перешел на следующее решение
UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] init];
UIFontDescriptor *fontDescriptorForHelveticaNeue = [fontDescriptor fontDescriptorWithFamily:@"Helvetica Neue"];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptorForHelveticaNeue fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
textFont = [UIFont fontWithDescriptor:symbolicFontDescriptor size:textFontPointSize];
Кажется, что это делает все правильно. Я попробовал предыдущий подход с другим семейством шрифтов, и мне показалось, что он запутался с fontName и fontFamily. Надеюсь это поможет!
источник
Ответы:
Это ошибка Apple. Он был представлен в iOS 7.0.3 и еще не исправлен в iOS 7.0.4. Похоже, это исправлено в предварительной версии iOS 7.1 для разработчиков. Вот код (предоставленный Apple на форумах разработчиков) для решения проблемы:
Также стоит отметить, что в текущей версии Xcode (5.0.1 (5A2053)) этот шрифт не указан как опция в раскрывающемся списке «Шрифт» в Интерфейсном Разработчике. Итак, если вы ранее настроили метку с этим шрифтом, вы заметите, что пользовательский интерфейс запутан, и метке в конечном итоге назначается другой шрифт и размер во время выполнения (см. Снимок экрана пользовательского интерфейса ниже). Для меток, настроенных в раскадровках / xibs, вам нужно будет сбросить шрифт в коде.
Для справки здесь является обсуждение вопроса в Девых форумах.
источник
Это ошибка в iOS 7.0.3.
Если вы явно используете HelveticaNeue-Italic, вы можете создать его, используя этот обходной путь:
Обратите внимание, однако, что это временное решение будет работать только на iOS 7; это не развертываемое с прошивкой 6 (потому
CTFontRef
иUIFont
не бесплатный мостиком на IOS 6). Однако в iOS 6 вы можете просто использовать свой обычный код поиска шрифтов.источник
Я считаю, что это ошибка. Я подал его как таковой в Apple. К сожалению для меня, в моем приложении происходит сбой. Шрифт используется в сторонней библиотеке, которую я использую. Многие люди в Твиттере сообщают о проблемах.
источник
Если вы динамически получить доступ к курсивному шрифту , то вместо того , чтобы получить доступ к шрифту по имени
[UIFont fontWithName:@"HelveticaNeue-Italic" size:15.0f]
использовать[UIFont italicSystemFontOfSize:15.0f]
это работает отлично для меня.источник
fontWithName:size:
сначала попробовать запустить , а если результат -nil
запуститьitalicSystemFontOfSize:
, который всегда должен что-то возвращать и, по крайней мере, избегать сбоев.В настоящее время я не нахожу сеанс, но они сказали что-то, что вы не можете полагаться на шрифты, которые больше доступны в iOS7. Они могут даже измениться в течение всего срока службы вашего приложения. Это в основном означает: когда вы указываете шрифты в своем приложении, вы облажаетесь, используйте вместо этого дескрипторы шрифтов или предпочтительные шрифты!
источник
Я нашел другое решение, которое, кажется, работает. Я отключился от звонка
[[UIFont italicSystemFontOfSize:12.0] fontName]
чтобы увидеть, какой в действительности используется системный курсивный шрифт, и он вернул ".HelveticaNeueInterface-ItalicM3". Простой тест показывает, что использование
[UIFont fontWithName:@".HelveticaNeueInterface-ItalicM3" size:12.0]
работает! Сравнивая их визуально, шрифт, возвращаемый приведенным выше вызовом, выглядит точно так же, как исходный шрифт HelveticaNeue-Italic.
Эта проблема почти наверняка является ошибкой ... Helvetica Neue - шрифт по умолчанию в iOS 7, поэтому шрифты этого семейства не должны отсутствовать. В Xcode v.5.0 все работало нормально, но сразу после обновления до 5.0.1 эта проблема начала появляться. Я сообщил об ошибке в Apple, отметив это. А пока это решение, кажется, работает ...
источник
Отчет об ошибке, который я отправил в Apple, был помечен как «Закрыто как дубликат». Я надеюсь, что это означает, что они действительно считают это ошибкой. Однако iOS 7.0.4 не исправляет ошибку.
источник
Кажется, что ошибка была исправлена в iOS 7.1 beta 1.
[UIFont fontWithName:@"HelveticaNeue-Italic" size:size];
возвращает шрифт.источник
У меня был такой же сбой, который раньше вызывал сбой только в iOS 7.0.3 и 7.0.4 и отлично работал во всех других версиях. После стольких исследований я узнал, что @ "HelveticaNeue-Italic" недоступен в версиях iOS 7.0.3 и 7.0.4, поэтому в этих версиях я получал вышеуказанный сбой.
Я исправил проблему с приведенным ниже кодом, это может быть полезно для нуждающихся.
Журнал сбоев:
источник
Поскольку никто ничего не упомянул о поддержке курсива HelveticaNeue в UIWebView, я решил поделиться своими выводами.
Начиная с версии 7.0.6, обычный курсив по-прежнему отсутствует в UIWebView и, похоже, возвращается к UltraLightItalic в том же семействе. Это выглядит немного странно, когда он находится рядом с обычным шрифтом HelveticaNeue без курсива, поскольку он намного светлее.
Мое обходное решение заключалось в использовании обычной Helvetica вместо HelveticaNeue, но только для курсива. Итак, если у вас есть CSS, который выглядит так:
... вы бы добавили два других класса для переопределения
<i>
и<em>
:Обычный курсив Helvetica выглядит нормально, и я не думаю, что кто-то заметил бы, что это не HelveticaNeue.
источник