iOS 7.0.3の「HelveticaNeue-Italic」はどうなりましたか


100

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の「MetaFonts」について話します。彼が言うことは、呼び出し中のフォントは次のようになるということです:

+ (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.3.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と混同されているようです。お役に立てれば!


私もこれを見たことがあります。何が起こったのかわからないが、それはかなり退行です。
ipodishima 2013年

興味深いことに、iOS 7.0.3のPagesにはHelvetica Neue Italicが表示されています:i.stack.imgur.com/xpJKl.png
Leo Natan

ですから、あなた自身の質問と調査で私の質問に答えたようです。フォント記述子を使用すると、実際に7.0.3 iPhoneでイタリックフォントが表示されます。
Rick van der Linde

これはiOS
7.0.4の

回答:


31

これはAppleのバグです。iOS 7.0.3で導入され、iOS 7.0.4ではまだ修正されていません。iOS 7.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の[Font]ドロップダウンリストにオプションとして表示されないことにも注意してください。したがって、このフォントを使用して以前にラベルを構成した場合は、UIが混乱し、実行時にラベルに他のフォントとサイズが割り当てられることに気付くでしょう(以下のuiのスクリーンキャップを参照)。ストーリーボード/ xibsで構成されたラベルの場合、コードでフォントをリセットする必要があります。

参考のため、ここでのdevのフォーラムで問題の議論があります。

ここに画像の説明を入力してください


あなたはすべての用途を別のものに置き換えたと言います。何に置き換えましたか?そのフォントがiOSの7で導入されているように見えるので、我々は以前あなたがXIBファイルでHelveticaNeue-MediumItalicと交換した場合、我々はiOSの6の上に誤った結果を得ることに気づいたと
GBegen

HelveticaNeue-LightItalicに置き換えました。それがいつ導入されたかはわかりません。私のアプリはiOS7以降
Mike Vosseller、2013年

7

これはiOS 7.0.3のバグです。

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

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

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


4

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


1
参考:テストしたところ、iOS 7.0.4にもバグが残っています。
David Lari

3

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


これはおそらく、この問題に対する最もクリーンな回避策です。iOS 6のサポートが必要なfontWithName:size:場合は、最初に実行してみて、結果がの場合はnil実行italicSystemFontOfSize:してください。これにより、常に何かが返され、少なくともクラッシュが回避されます。
SaltyNuts 2013年

2

私は現在セッションを見つけられませんでしたが、iOS7で利用できるフォントに依存することはできないとのことでした。アプリの存続期間中に変更することもできます。つまり、基本的には、アプリでフォントを指定すると、ねじ込まれ、代わりにフォント記述子または優先フォントを使用することになります。


2
私が見つけることができる最も近い一致はasciiwwdc.com/2013/sessions/223ですが、システム提供のフォントではなく、ダウンロード可能なフォントを参照しているようです。
ヒルトンキャンベル

上記の新しい情報を参照してください。プレゼンターが言っていることは、「MetaFonts」のマッピングをバージョン間で同じ基礎フォントに当てはめることはできないということだと思います。「HelveticaNeue-Italic」のようなものがなくなる可能性さえあると彼が言っているとは思わない。
Scott Sarnikowski 2013年

1

機能しているように見える別の解決策を見つけました。に電話をログアウトしました

[[UIFont italicSystemFontOfSize:12.0] fontName]

実際に使用されているシステムのイタリックフォントが何であるかを確認し、「。HelveticaNeueInterface-ItalicM3」を返しました。簡単なテストでは、

[UIFont fontWithName:@".HelveticaNeueInterface-ItalicM3" size:12.0]

動作します!それらを視覚的に比較すると、上記の呼び出しで返されたフォントは、元の 'HelveticaNeue-Italic'フォントとまったく同じに見えます。

この問題はほぼ間違いなくバグです... iOS 7のデフォルトのフォントはHelvetica Neueなので、そのファミリーのフォントが欠落していてはいけません。Xcode v.5.0ではすべてが正常に機能しましたが、5.0.1にアップグレードした直後に、この問題が発生し始めました。私はAppleに多くのことを指摘してバグを報告しました。それまでは、このソリューションは機能しているようです...


1

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


1
私は同じ応答を得ました。彼らがそれを修正することを願っています。
Scott Sarnikowski、2013年


0

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 

-1

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ではないことに誰も気付かないと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.