web-dev-qa-db-ja.com

iOS 7.0.3で「HelveticaNeue-Italic」がどうなったのか

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から始まります。プレゼンターは、例として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];

FontWithDescriptorの有効なUIFontを取得し、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と混同されるように思われました。お役に立てれば!

100

これはAppleのバグです。iOS7.0.3で導入されましたが、iOS 7.0.4ではまだ修正されていません。iOS7.1の開発者プレビューでは修正されているようです。この問題を回避するためのコード(開発フォーラムでAppleで提供)):

#import <CoreText/CoreText.h>

CGFloat size = 14;
UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Italic" size:size];
if (font == nil && ([UIFontDescriptor class] != nil)) {
    font = (__bridge_transfer UIFont*)CTFontCreateWithName(CFSTR("HelveticaNeue-Italic"), size, NULL);
}

また、Xcodeの現在のバージョン(5.0.1(5A2053))では、このフォントがInterface Builderの[フォント]ドロップダウンリストにオプションとしてリストされていないことにも注意してください。したがって、以前にこのフォントでラベルを設定した場合、UIが混乱し、実行時にラベルに他のフォントとサイズが割り当てられることに気付くでしょう(以下のUIスクリーンキャップを参照)。ストーリーボード/ xibsで構成されたラベルの場合、コード内のフォントをリセットする必要があります。

参考のために here は開発者フォーラムでの問題の議論です。

enter image description here

31
Mike Vosseller

これはiOS 7.0.3のバグです。

HelveticaNeue-Italicを明示的に使用している場合は、次の回避策を使用して作成できます。

UIFont* font = (__bridge_transfer UIFont*)CTFontCreateWithName(CFSTR("HelveticaNeue-Italic"), fontSize, NULL);

ただし、この回避策はonly iOS 7で機能することに注意してください。 iOS 6には展開できません(CTFontRefUIFontはiOS 6でフリーダイヤルブリッジされていなかったため)。ただし、iOS 6では、通常のフォント検索コードを使用できます。

7
Dave DeLong

それはバグだと私は信じています。 Appleにそのように提出しました。悲しいことに、私のアプリはクラッシュしています。フォントは、私が使用しているサードパーティのライブラリで使用されています。 Twitterの多くの人々が問題を報告しています。

4
David Lari

イタリックフォントに動的にアクセスしている場合は、名前でフォントにアクセスする代わりに[UIFont fontWithName:@"HelveticaNeue-Italic" size:15.0f] つかいます [UIFont italicSystemFontOfSize:15.0f]これは私にとってはうまく機能しています。

3
Kapil Chandel

私は現在、セッションを見つけられませんが、彼らはあなたがiOS7でもう利用できるフォントに頼ることができないと言った。アプリの有効期間中に変更されることもあります。つまり、基本的には、アプリでフォントを指定するときは、めちゃくちゃになり、代わりにフォント記述子または優先フォントを使用します!

2
Michael Ochs

私がAppleで提出したバグレポートは「重複としてクローズ」とマークされています。彼らがそれをバグと考えていることを期待しています。しかし、iOS 7.0.4はバグを修正しません。

1
David Lari

動作していると思われる別の解決策を見つけました。への呼び出しをログアウトしました

[[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に注意してバグを報告しました。それまで、この解決策はうまくいくようです...

1
Fateh Khalsa

このバグはiOS 7.1ベータ1で修正されたようです。[UIFont fontWithName:@"HelveticaNeue-Italic" size:size];はフォントを返します。

1
Leo Natan

IOS 7.0.3および7.0.4でのみクラッシュする同じクラッシュがありましたが、他のすべてのバージョンで完全に動作します。よく調べた結果、@ "HelveticaNeue-Italic"はiOS 7.0.3および7.0.4バージョンでは利用できないため、これらのバージョンでは上記のクラッシュが発生することがわかりました。

私は以下のコードで問題を修正しました。これは貧しい人に役立つかもしれません。

self.headerFont = [UIFont fontWithName:@"HelveticaNeue-Italic" size:16.0f];
if (self.headerFont == nil) {
    self.headerFont = [UIFont fontWithName:@"HelveticaNeue" size:16.0f];
}

クラッシュログは次のとおりです。

[__NSCFConstantString pointSize]: unrecognized selector sent to instance 
0

UIWebViewのHelveticaNeueイタリックサポートについて誰も言及していないので、私は自分の発見を共有すると思いました。

7.0.6の時点では、UIWebViewには通常の斜体がまだなく、同じファミリのUltraLightItalicにフォールバックするようです。これは、通常の重量のイタリックでないHelveticaNeueのテキストのすぐ隣にある場合、少し軽いので少し奇妙に見えます。

私の回避策は、HelveticaNeueの代わりに通常のHelveticaを使用することでしたが、それは斜体のみです。したがって、次のようなCSSがある場合:

.myCssClass {
    font-family:HelveticaNeue;
    /* etc, etc */
}

...他の2つのクラスを追加して、<i>および<em>

.myCssClass i  { font-family:Helvetica; }
.myCssClass em { font-family:Helvetica; }

通常のHelveticaのイタリックフォントは見栄えがよく、HelveticaNeueではないことに誰も気付かないと思います。

0
Brian Rak