Ich habe gerade meinen iPod touch auf iOS 7.0.3 aktualisiert und "HelveticaNeue-Italic" scheint verschwunden zu sein. Wenn ich am Telefon abfrage mit:
[UIFont fontNamesForFamilyName:@"Helvetica Neue"]
Ich erhalte 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 ausführe, erhalte 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
Hat das noch jemand gesehen?
---- Neue Informationen ----
Ich ging zurück zum WWDC 2013-Video "Verwenden von Schrift mit 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 Schriftart unter Aufrufen wie folgt lautet:
+ (NSFont *)messageFontOfSize:(CGFloat)fontSize
Es wird nicht garantiert, dass dieselbe zugrunde liegende Schriftart über Versionen oder sogar unterschiedliche Verwendungszwecke hinweg zurückgegeben wird. Sein Beispiel war Lucinda Grande. Er schien nicht zu sagen, dass die Verwendung von "HelveticaNeue-Italic" von Version zu Version gehen könnte.
Also habe ich ein Experiment in iOS 7 erstellt. Ich habe meine Schriftart 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 Optimierung ----
Obwohl die oben beschriebene Lösung funktioniert hat, denke ich nicht, dass sie formal korrekt ist. Ich habe auf die folgende Lösung umgestellt
UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] init];
UIFontDescriptor *fontDescriptorForHelveticaNeue = [fontDescriptor fontDescriptorWithFamily:@"Helvetica Neue"];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptorForHelveticaNeue fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
textFont = [UIFont fontWithDescriptor:symbolicFontDescriptor size:textFontPointSize];
Dies scheint die richtigen Dinge zu tun. Ich habe den vorherigen Ansatz mit einer anderen Schriftfamilie ausprobiert und es schien mit dem fontName und der fontFamily verwechselt zu werden. Hoffe das hilft!
quelle
Antworten:
Dies ist ein Apple-Fehler. Es wurde in iOS 7.0.3 eingeführt und wurde ab iOS 7.0.4 noch nicht behoben. Es scheint in der Entwicklervorschau von iOS 7.1 behoben zu sein. Hier ist Code (von Apple in den Entwicklerforen bereitgestellt), um das Problem zu umgehen:
Es ist auch erwähnenswert, dass in der aktuellen Version von Xcode (5.0.1 (5A2053)) diese Schriftart nicht als Option in der Dropdown-Liste Schriftart im Interface Builder aufgeführt ist. Wenn Sie zuvor ein Etikett mit dieser Schriftart konfiguriert haben, werden Sie feststellen, dass die Benutzeroberfläche verwirrt ist und dem Etikett zur Laufzeit eine andere Schriftart und Größe zugewiesen wird (siehe UI-Bildschirmabdeckung unten). Für Beschriftungen, die in Storyboards / Xibs konfiguriert sind, müssen Sie die Schriftart im Code zurücksetzen.
Als Referenz dient hier die Diskussion des Themas in den Entwicklerforen.
quelle
Dies ist ein Fehler in iOS 7.0.3.
Wenn Sie HelveticaNeue-Italic explizit verwenden, können Sie es mithilfe dieser Problemumgehung erstellen:
Beachten Sie jedoch, dass diese Problemumgehung nur unter iOS 7 funktioniert. es ist nicht ausfahrbaren auf iOS 6 (da
CTFontRef
undUIFont
waren nicht gebührenfrei auf iOS überbrückte 6). Unter iOS 6 können Sie jedoch nur Ihren normalen Code für die Suche nach Schriftarten verwenden.quelle
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 von mir verwendeten Drittanbieter-Bibliothek verwendet. Viele Leute auf Twitter berichten über Probleme.
quelle
Wenn Sie dynamisch die kursive Schrift dann statt den Zugriff auf die Schrift mit Namen zugreifen,
[UIFont fontWithName:@"HelveticaNeue-Italic" size:15.0f]
verwenden[UIFont italicSystemFontOfSize:15.0f]
dies funktioniert gut für mich.quelle
fontWithName:size:
zuerstnil
auszuführen , und wenn das Ergebnis lautet , ausführenitalicSystemFontOfSize:
, was immer etwas zurückgeben sollte, und zumindest einen Absturz vermeiden.Ich finde die Sitzung derzeit nicht, aber sie haben etwas gesagt, auf das Sie sich nicht mehr verlassen können, wenn Schriftarten unter iOS7 verfügbar sind. Sie können sich sogar während der Lebensdauer Ihrer App ändern. Was im Grunde bedeutet: Wenn Sie Schriftarten in Ihrer App angeben, werden Sie geschraubt, verwenden Sie stattdessen Schriftbeschreibungen oder bevorzugte Schriftarten!
quelle
Ich habe eine andere Lösung gefunden, die zu funktionieren scheint. Ich habe einen Anruf bei abgemeldet
[[UIFont italicSystemFontOfSize:12.0] fontName]
Um zu sehen, welche kursive Systemschrift tatsächlich verwendet wird, wird ".HelveticaNeueInterface-ItalicM3" zurückgegeben. Ein einfacher Test zeigt, dass mit
[UIFont fontWithName:@".HelveticaNeueInterface-ItalicM3" size:12.0]
funktioniert! Wenn Sie sie visuell vergleichen, scheint die vom obigen Aufruf zurückgegebene Schriftart genau mit der ursprünglichen 'HelveticaNeue-Italic'-Schriftart übereinzustimmen.
Dieses Problem ist mit ziemlicher Sicherheit 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 einwandfrei funktioniert, aber unmittelbar nach dem Upgrade auf 5.0.1 trat dieses Problem auf. Ich habe einen Fehler bei Apple gemeldet, der dies ebenfalls bemerkt. Bis dahin scheint diese Lösung zu funktionieren ...
quelle
Der Fehlerbericht, den ich bei Apple eingereicht habe, wurde als "Als Duplikat geschlossen" markiert. Ich bin zuversichtlich, dass dies bedeutet, dass sie es als Fehler betrachten. IOS 7.0.4 behebt den Fehler jedoch nicht.
quelle
Der Fehler scheint in iOS 7.1 Beta 1 behoben worden zu sein.
[UIFont fontWithName:@"HelveticaNeue-Italic" size:size];
Gibt eine Schriftart zurück.quelle
Ich hatte den gleichen Absturz, der früher nur in iOS 7.0.3 und 7.0.4 abgestürzt war und in allen anderen Versionen einwandfrei funktioniert. Nach so vielen Nachforschungen stellte ich fest, dass @ "HelveticaNeue-Italic" in den Versionen iOS 7.0.3 und 7.0.4 nicht verfügbar ist, so dass ich in diesen Versionen immer über den Absturz hinausging.
Ich habe das Problem mit dem folgenden Code behoben. Dies kann für Bedürftige hilfreich sein.
Das Absturzprotokoll lautet:
quelle
Da in UIWebView niemand etwas über die kursive Unterstützung von HelveticaNeue erwähnt hat, dachte ich, ich würde meine Ergebnisse teilen.
Ab 7.0.6 fehlt die reguläre Kursivschrift in UIWebView noch und scheint auf UltraLightItalic in derselben Familie zurückzugreifen. Dies sieht etwas seltsam aus, wenn es direkt neben dem nicht kursiven HelveticaNeue-Text mit normalem Gewicht steht, da es so viel leichter ist.
Meine Problemumgehung bestand darin, gewöhnliche Helvetica anstelle von HelveticaNeue zu verwenden, jedoch nur für Kursivschrift. Wenn Sie also CSS haben, das so aussieht:
... Sie würden zwei weitere Klassen zum Überschreiben hinzufügen
<i>
und<em>
:Die normale kursive Helvetica-Schrift sieht gut aus und ich glaube, niemand würde bemerken, dass es sich nicht um HelveticaNeue handelt.
quelle