wake-up-neo.net

Was ist mit "HelveticaNeue-Italic" unter iOS 7.0.3 passiert?

Ich habe gerade meinen iPod touch auf iOS 7.0.3 aufgerüstet und "HelveticaNeue-Italic" scheint verschwunden zu sein. Wenn ich am Telefon mit frage:

[UIFont fontNamesForFamilyName:@"Helvetica Neue"]

Ich bekomme die folgenden 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

Wenn ich dieselbe Abfrage im Simulator durchführe, bekomme ich (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

Wer sieht das sonst noch?

---- Neue Informationen ----

Ich ging zurück zum WWDC 2013-Video "Using Font with Text Kit" und der interessante Teil beginnt um 12:22 Uhr. Der Moderator spricht als Beispiel über "MetaFonts" in OS X. Was er sagt, ist, dass die Schrift darunter lautet:

+ (NSFont *)messageFontOfSize:(CGFloat)fontSize

es kann nicht garantiert werden, dass die gleiche zugrunde liegende Schriftart über Versionen oder sogar über unterschiedliche Verwendungszwecke zurückgegeben wird. Sein Beispiel war Lucinda Grande. Er schien nicht zu sagen, dass die Verwendung von "HelveticaNeue-Italic" von Version zu Version gehen konnte.

Also habe ich ein Experiment in iOS 7 erstellt. Ich habe meine Schrift mit dem folgenden Code erstellt:

UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:@"Helvetica Neue" size:16.0];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];

UIFont *fontWithDescriptor = [UIFont fontWithDescriptor:symbolicFontDescriptor size:16.0];

Ich habe ein gültiges UIFont für fontWithDescriptor zurückbekommen und als ich die Schriftart für den fontName abfragte, mit:

[fontWithDescriptor fontName]

Ich bin zurückgekommen... 

HelveticaNeue-Italic

Stelle dir das vor???

Eine mögliche Antwort auf 7.0.3 scheint also der obige Code zu sein.

---- Weitere Anpassung ----

Obwohl die Lösung oben funktioniert hat, glaube ich nicht, dass sie formal korrekt ist. Ich habe zu folgender Lösung gewechselt

    UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] init];

    UIFontDescriptor *fontDescriptorForHelveticaNeue = [fontDescriptor fontDescriptorWithFamily:@"Helvetica Neue"];
    UIFontDescriptor *symbolicFontDescriptor = [fontDescriptorForHelveticaNeue fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];

    textFont = [UIFont fontWithDescriptor:symbolicFontDescriptor size:textFontPointSize];

Dies scheint alle richtigen Dinge zu tun. Ich habe den vorherigen Ansatz mit einer anderen Schriftfamilie ausprobiert, und es schien, als würde dies mit dem fontName und der fontFamily verwirrt. Hoffe das hilft!

100

Dies ist ein Apple-Fehler. Es wurde in iOS 7.0.3 eingeführt und ist seit iOS 7.0.4 noch nicht behoben. Es scheint in der Entwicklervorschau von iOS 7.1 behoben zu sein. Hier ist der Code (von Apple in den Dev-Foren bereitgestellt), um das Problem zu umgehen:

#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);
}

Erwähnenswert ist auch, dass diese Schriftart in der aktuellen Version von Xcode (5.0.1 (5A2053)) nicht als Option in der Dropdown-Liste "Schriftart" im Interface Builder aufgeführt ist. Wenn Sie also zuvor ein Label mit dieser Schriftart konfiguriert haben, werden Sie feststellen, dass das UI verwirrt ist und das Label zur Laufzeit eine andere Schriftart und -größe erhält (siehe ui screencap unten). Für in Storyboards/Xibs konfigurierte Labels müssen Sie die Schriftart im Code zurücksetzen.

Zur Referenz hier ist die Diskussion des Problems in den Dev-Foren.

enter image description here

31
Mike Vosseller

Dies ist ein Fehler in iOS 7.0.3.

Wenn Sie HelveticaNeue-Italic explizit verwenden, können Sie es mithilfe der folgenden Problemumgehung erstellen:

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

Beachten Sie jedoch, dass diese Problemumgehung only unter iOS 7 funktioniert. Es kann nicht für iOS 6 bereitgestellt werden (da CTFontRef und UIFont unter iOS 6 nicht gebührenfrei gebrückt wurden). Unter iOS 6 können Sie jedoch einfach Ihren regulären Zeichensatzcode verwenden.

7
Dave DeLong

Ich glaube, dass es ein Fehler ist. Ich habe es als solches bei Apple eingereicht. Leider stürzt meine App jetzt ab. Die Schriftart wird in einer Drittanbieter-Bibliothek verwendet, die ich verwende. Viele Leute auf Twitter melden Probleme. 

4
David Lari

Wenn Sie dynamisch auf die kursive Schrift zugreifen, können Sie nicht auf die Schrift nach Name. [UIFont fontWithName:@"HelveticaNeue-Italic" size:15.0f] Verwenden Sie [UIFont italicSystemFontOfSize:15.0f] das funktioniert gut für mich.

3
Kapil Chandel

Ich finde die Sitzung derzeit nicht, aber sie sagten etwas, das man nicht mehr darauf verlassen kann, dass Schriftarten unter iOS7 verfügbar sind. Sie können sich sogar während der Lebensdauer Ihrer App ändern. Was im Wesentlichen bedeutet: Wenn Sie in Ihrer App Schriftarten angeben, werden Sie vermasselt, verwenden Sie stattdessen Schriftdeskriptoren oder bevorzugte Schriftarten!

2
Michael Ochs

Der Fehlerbericht, den ich bei Apple eingereicht habe, wurde als "Duplikat geschlossen" markiert. Ich bin zuversichtlich, dass sie es für einen Fehler halten. IOS 7.0.4 behebt den Fehler jedoch nicht.

1
David Lari

Ich habe eine andere Lösung gefunden, die zu funktionieren scheint. Ich habe einen Anruf abgemeldet 

[[UIFont italicSystemFontOfSize:12.0] fontName]

um zu sehen, was die tatsächlich verwendete kursive Systemschriftart ist, wurde ".HelveticaNeueInterface-ItalicM3" angezeigt. Ein einfacher Test zeigt die Verwendung von 

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

funktioniert! Beim visuellen Vergleich scheint die vom obigen Aufruf zurückgegebene Schriftart genau der ursprünglichen Schrift 'HelveticaNeue-Italic' zu entsprechen.

Dieses Problem ist höchstwahrscheinlich ein Fehler. Helvetica Neue ist die Standardschriftart in iOS 7, daher sollten Schriftarten in dieser Familie nicht fehlen. In Xcode v.5.0 hat alles gut funktioniert, aber unmittelbar nach dem Upgrade auf 5.0.1 wurde dieses Problem angezeigt. Ich habe einen Fehler mit Apple gemeldet, der so viel bemerkt. Bis dahin scheint diese Lösung zu funktionieren ...

1
Fateh Khalsa

Der Fehler scheint in iOS 7.1 Beta 1 behoben worden zu sein. [UIFont fontWithName:@"HelveticaNeue-Italic" size:size]; gibt eine Schriftart zurück.

1
Leo Natan

Ich hatte einen Absturz, der früher nur in iOS 7.0.3 und 7.0.4 abstürzte und in allen anderen Versionen einwandfrei funktioniert. Nach so vielen Nachforschungen erfuhr ich, dass @ "HelveticaNeue-Italic" in den Versionen 7.0.3 und 7.0.4 nicht verfügbar ist, sodass ich in diesen Versionen einen Absturz hatte. 

Ich habe das Problem mit dem folgenden Code behoben. Dies könnte für jemanden hilfreich sein.

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

Das Absturzprotokoll lautet:

[__NSCFConstantString pointSize]: unrecognized selector sent to instance 
0

Da niemand etwas über die kursive Unterstützung von HelveticaNeue in UIWebView erwähnt hat, dachte ich, ich würde meine Erkenntnisse mitteilen.

Seit 7.0.6 fehlt die reguläre Kursivschrift in UIWebView immer noch und scheint auf UltraLightItalic in derselben Familie zurückzugreifen. Dies sieht ein wenig seltsam aus, wenn es neben normalem Gewicht nicht-kursiver HelveticaNeue-Text ist, da es so viel leichter ist.

Mein Workaround bestand darin, normale Helvetica anstelle von HelveticaNeue zu verwenden, jedoch nur für Kursivschrift. Wenn Sie also CSS haben, sieht das so aus:

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

... Sie würden zwei weitere Klassen hinzufügen, um <i> und <em> zu überschreiben:

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

Die normale kursive Schrift von Helvetica sieht gut aus und ich glaube nicht, dass irgendjemand merken würde, dass es nicht HelveticaNeue ist.

0
Brian Rak