Benutzerdefinierte Größe der Schriftart in Xcode 6 Größenklassen nicht ordnungsgemäß mit Benutzerdefinierten Schriftarten
Xcode 6 hat eine neue Funktion, wo Schriftarten und-Größen in UILabel, UITextField und UIButton kann automatisch eingestellt werden, basierend auf der Größe der Klasse der aktuellen Geräte-Konfiguration mit der rechten in das storyboard. Zum Beispiel können Sie ein UILabel zu verwenden, Schriftgröße 12 auf "Breite, kompakte Höhe" (wie beim iPhone im Querformat) - Konfigurationen und-Größe 18 auf "normale Breite, regelmäßige Höhe" Konfigurationen (wie z.B. iPads). Weitere Informationen finden Sie hier:
Dies ist ein wirklich tolles feature-in der Theorie, da könnte es unnötig werden, um programmgesteuert verschiedene Schriftarten auf UI-Funktionen auf Basis der Geräte-Konfiguration. Jetzt habe ich einige bedingte code, legt die Schriftarten auf der Grundlage der Geräte-Typ, aber das bedeutet natürlich, habe ich die Schriften programmatisch überall in der app. Also ich war anfangs echt begeistert von diesem feature, aber ich fand, dass es ein ernstes problem in der tatsächlichen Nutzung für mich (vielleicht ein Fehler). Beachten Sie, dass ich bin Gebäude gegen SDK 8 und die Festlegung eines Mindest-Ziel der Bereitstellung von iOS 8, so hat dies nichts zu tun mit der Kompatibilität mit älteren Versionen von iOS.
Das problem ist dieses:
Wenn ich unterschiedliche Schriftgrößen für unterschiedliche Größenklassen, und verwenden Sie die "System" - Schrift zur Verfügung gestellt von iOS, funktioniert alles wie erwartet und die Größe der schriftart ändern, basierend auf der Größe der Klasse. Wenn ich eine benutzerdefinierte schriftart bereitgestellt durch meine Bewerbung (ja, ich habe es richtig in mein Programm-bundle, wie es funktioniert programmgesteuert) und legen Sie die benutzerdefinierte schriftart für eine Beschriftung in einem XCode 6 storyboard, das funktioniert auch wie erwartet. Aber wenn ich versuche, mit unterschiedlichen Größen von die benutzerdefinierte schriftart für verschiedene Größenklassen, in dem storyboard, es funktioniert plötzlich nicht. Der einzige Unterschied in der Konfiguration ist die schriftart die ich gewählt habe (eine benutzerdefinierte vs. die System-Schrift). Stattdessen werden alle Schriftarten auf dem Gerät und den simulator als Standard-system-schriftart auf die Standard-Größe, unabhängig von der Größe, Klasse (und ich überprüft über den debugger, die es ersetzen die system-schriftart für die tatsächliche angegeben in der storyboard). Im Grunde ist die Größe Klasse feature gebrochen erscheint für benutzerdefinierte Schriftarten. Auch interessant ist, die kundenspezifische Schriftarten eigentlich die Anzeige und passen Sie die Größe richtig in der XCode 6 in der "Vorschau" Bereich für die view-controller: es ist nur bei der Ausführung auf die aktuelle iOS-system, dass es nicht mehr funktioniert (das macht mich denken, dass ich bin, ist die Konfiguration korrekt).
Ich habe versucht, mehrere verschiedene benutzerdefinierte Schriftarten und es scheint nicht zu funktionieren für jeden von Ihnen, aber es funktioniert immer wenn ich "System" statt.
Trotzdem, hat jemand anderes dieses problem gesehen in Xcode 6? Irgendwelche Ideen auf, ob das ein bug in iOS 8, Xcode, oder etwas, was ich falsch mache? Die einzige Lösung die ich gefunden habe, wie ich schon sagte, ist weiterhin das programmgesteuerte festlegen der Schriftarten, die wie ich schon seit über 3 iOS-Versionen, denn das funktioniert nicht. Aber ich würde gerne in der Lage sein, um diese Funktion zu nutzen, wenn ich es für die Arbeit mit benutzerdefinierten Schriftarten. Mit der System-schriftart ist nicht akzeptabel für unser design.
ZUSÄTZLICHE INFO:
Als Xcode-8.0, Fehler ist behoben.
- Ich habe das gleiche problem. Einstellung eine benutzerdefinierte schriftart basierend auf der Größe der Klasse scheint nicht zu funktionieren. Seltsam, der gleiche code sowohl Vorschau korrekt in Xcode und läuft einwandfrei unter iOS 7.
- Ich hatte nicht versucht es auf iOS 7, da die neue version von meiner app fällt die Unterstützung für iOS 7, aber diese information macht mich zuversichtlich, dass es nur ein bug in iOS 8. Denn jetzt bin ich nur die Einstellung alle benutzerdefinierten Schriftarten programmgesteuert, aber ich werde betrachten die Einreichung ist ein Fehler mit Apple.
- Kann ich bestätigen, ist dies immer noch der Fall in xCode 6.1 (6A1052d) app-store-release.
- Der bug-report, die mine wurde als Duplikat gekennzeichnet ist immer noch "offen" mit Apple nach Ihrem system.
- Keine Lösung, aber ich habe es geschafft zu bekommen, um das problem mit einer Kategorie. Meine Kategorie UILabel+Schrift.h (ich habe eine für Schaltflächen) enthält den folgenden code. -(void)awakeFromNib { float size = [self.schriftart-pointSize]; self.font = [UIFont fontWithName:@"YourCustomFont" - Größe:Größe]; } So, dies erlaubt uns, die Größe der Klassen mit der System-schriftart zu setzen, die Punkt-Werte in verschiedenen Größenklassen, und die Kategorie wird sichergestellt, dass der korrekte font gesetzt ist. Vielleicht könntest du probieren, bis Apple ein update veröffentlicht?
- Ja, das ist ein annehmbarer workaround für das problem, zumindest so dass Sie nicht haben, um es überall. Ich mag es. Leider, es wird immer komplizierter, wenn Sie benötigen, um mehrere verschiedene Schriftarten in verschiedenen Orten. Ich will immer noch die Flexibilität des in der Lage seins, um die Konfiguration in das storyboard, also werde ich wahrscheinlich lassen Sie es wie es ist, bis Sie kommen mit einem fix für diesen Fehler.
- sollten Sie nicht außer Kraft system-Methode awakeFromNib in Ihrer Kategorie. Stattdessen erstellen Sie eine Methode in Ihrer Kategorie und rufen Sie für welches label Sie möchten gesetzt ist, oder, Unterklasse Ihrem label.
- Noch nicht gelöst in Xcode 6.3.1. Ich bin wütend auf diese.
- Wie @Harry gesagt funktioniert es immer noch nicht auf v6.3.1. Sie verbringen viel Zeit damit, alles programmgesteuert. 7 Monate und immer noch nicht gepatcht ... Anstatt nur darüber nachzudenken, dass mehr Geld (Preise gehen bis auf all Ihren Produkten), sollten Sie sich Gedanken über die Menschen, Dank denen Sie in der Lage sind das Geld verdienen...
- Noch nichts 6.3.2. Ich musste gehen durch eine Recht große storyboard-Datei hacking Dinge Weg. Von jetzt denke ich, wir können nur hoffen, dass für iOS 9 🙂
- Hier gilt das gleiche mit Xcode 6.3.2.
- Funktioniert immer noch nicht mit Xcode 7 beta 5
- Funktioniert immer noch nicht mit Xcode 7 final. Verstehe nicht, warum Apple nicht zu beheben.
- Sah einfach auf den bug-report, den ich bald nach der Veröffentlichung von iOS 8, und der bug, dass die mine geschlossen wurde, die ein Duplikat ist noch offen. Ich würde andere ermutigen, zu berichten, um zu versuchen, einige der Druck auf Sie, um es zu beheben. Wahrscheinlich ist es nicht Priorität für ein Update, nur weil es ein "workaround" (dh, verschiedene Möglichkeiten, das gleiche zu tun, programmgesteuert), aber ich bin überrascht, es ist nicht behoben, iOS 9, da Es eine Ihrer wichtigsten neuen Entwickler-freundliche features in iOS 8 sehr viel weniger nützlich.
- Ich habe auch dieses problem mit UIButtons, die kann man nicht überschreiben, setFont, wie es ist eine Methode, die auf die Beschriftung der Taste, nicht die Taste selbst. Irgendwelche Ideen?
- Noch ein bug in iOS 9 Xcode 7 (nicht sicher, die genaue version, nicht an meiner OS X-Maschine atm)
- funktioniert es immer noch nicht auf Xcode iOS 7.2 9.2
- funktioniert es immer noch nicht auf Xcode iOS 7.2.1 9.2
- funktioniert immer noch nicht.... was für ein merkwürdigen Fehler.... apple beheben sollte so bald wie möglich
- Funktioniert immer noch nicht
- Jeder Datei ein radar über diesen Fehler?
- Eingereicht ein radar, immer noch nicht funktioniert 7.3.1 iOS 9.3.
- Apple aktualisiert mein bug-report: die ursprünglichen bug-report wurde geschlossen. Ich werde versuchen, mit der letzten Xcode build, wenn ich kann.
- Als Xcode-8.0 (8A218a) kann ich sagen, dass der Fehler Weg ist 🙂
- Jetzt klappt es ziemlich gut mit Xcode 8:) tolle Arbeit Apple...
- Irgendwie hat dieser Fehler Auswirkungen sind noch heute in Xcode 10. Ich system-schriftart in der Spitze mit mehreren Größenklassen Schriften für ein label, und überschreiben Sie programmgesteuert, um sicherzustellen, dass die richtige schriftart angezeigt, die zur Laufzeit mit awakeWithNib, es zeigt system-schriftart statt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schnell beheben:
1) Set-Schriftarten als System für die Größenklassen
2) Unterklasse UILabel und überschreiben "layoutSubviews" - Methode wie:
Durch die Art und Weise, es ist eine sehr praktische Technik für ikonische Schriften
self.label.font = ...
Diese Weise können Sie verschiedene Schriften an verschiedenen Orten.- (id)initWithCoder:(NSCoder*)coder { self = [super initWithCoder:coder]; if (self) { self.font = [UIFont fontWithName:@"Custom-font-name" size:self.font.pointSize]; } return self; }
Statt- (void)layoutSubviews
Nachdem alles versucht, schließlich entschied ich mich für eine Kombination der oben genannten Lösungen. Mit Xcode 7.2, Swift 2.
@IBInspectable
können Sie die Schriftgröße in der Storyboard -didSet
Beobachter, um zu vermeiden, die Fallstricke vonlayoutSubviews()
(Endlosschleife für dynamische Tabelle anzeigen Zeilenhöhen) undawakeFromNib()
(siehe @cocoaNoob Kommentar)@IBDesignable
@IBDesignable
funktioniert nicht mittraitCollection
nach dieser anderen stack-ArtikelUIScreen.mainScreen()
eher alsself
pro diese stack-ArtikelAbhilfe für
UILabel
: halten Sie die gleiche Schriftgröße auf allen Größenklassen, sondern ändern Sie Ihr label Höhe entsprechend in jeder Größe Klasse. Ihr Etikett muss automatische Verkleinerung aktiviert. Es funktionierte gut in meinem Fall.adjustsFontSizeToFitWidth
scheint zu funktionieren nur für die Breite (die kann ich nicht verwenden, da der text des labels ist dynamisch).Diese (und andere Xcode - Größenklassen-bezogen) Fehler verursachte mir einige ernsthafte Trauer vor kurzem, als ich hatte gehen durch ein riesiges storyboard-Datei hacking Dinge Weg.
Für jemand anderen in dieser position, ich möchte noch hinzufügen, etwas auf @razor28 Antwort auf den Schmerz zu lindern.
In der header-Datei der benutzerdefinierten Unterklasse verwenden
IBInspectable
für Ihre runtime-Parametern. Dadurch werden diese Attribute zugänglich im "Attribute Inspector", optisch rechts oben ist die Standard-position für die Einstellungen für die schriftart.Beispiel verwenden:
Wird dies sehr hilfsbereit, erzeugen diese Ausgabe:
Ein weiterer Vorteil ist, dass wir jetzt nicht haben, zum hinzufügen von runtime-Parametern manuell für jedes label. Dies ist der nächste, den ich bekommen konnte, um zu XCode ist beabsichtigtes Verhalten. Hoffentlich ein richtiges Update ist auf dem Weg mit iOS 9 in diesem Sommer.
Ähnliche Lösung @razor28 ist, aber ich denke, ein wenig mehr universal. Auch funktioniert gut auf älteren iOS-Versionen
https://gist.github.com/softmaxsg/8a3ce30331f9f07f023e
Der Fehler ist immer noch gültig in XCode 7.0 GM.
Razor28 die Lösung führt dazu, dass Endlosschleifen in einigen Fällen. Meine Erfahrung ist, die mit der Verwendung in Verbindung mit SwipeView.
Stattdessen schlage ich vor, dass Sie:
1) Unterklasse UILabel und überschreiben setFont:
2) Legen Sie die benutzerdefinierte Klasse Ihrer UILabels und dann stellen Sie die Schriftgröße Klassen durch die Verwendung von System-schriftart
Das problem ist immer noch da, dass Sie können nicht verwenden Sie die Funktion zum ändern der Schriftarten für verschiedene Größenklassen von interface builder.
Nur set-schriftart basiert auf das Gerät, das Sie möchten, wie unten:
Diese funktioniert perfekt auf allen Geräten.
Keines dieser arbeitete für mich, aber diese Tat.
Sie müssen auch verwenden Sie die system-schriftart in IB
Immer noch nicht unterzeichnet richtige Antwort. Dieser code funktioniert gut für mich. Sie müssen deaktivieren, font-size für die Größe von Klassen im interface builder erste. Im IB können Sie benutzerdefinierte schriftart.
Einer Kombination von einigen der späteren oben genannten Antworten waren hilfreich. Hier, wie ich gelöst den IB bug über ein Swift-UILabel-Erweiterung:
Ich bin mit Swift, XCode 6.4. Also das ist, was ich Tat
Goto Designer -> Identity Inspector -> stellen Sie die Klasse auf ExUILabel
Gehen Sie dann auf Attribut-Inspektor in designer und legen Sie die font-Namen.
Habe ich noch schneller beheben (ich nehme an, Sie immer verwenden einer benutzerdefinierten schriftart).
Erstellen Sie eine Kategorie für UILabel und in Dateien mit buggy storyboard mit einer Größe von Klassen und engagierten Einstellung der schriftart für die verschiedenen Klassen:
Nur verwenden Ihre benutzerdefinierten Schriftarten im storyboard. Wenn buggy Dolmetscher verwenden Sie die system-schriftart statt eigene dieser Kategorie wird die schalten Sie es in Ihre eigene schriftart.
Ich hatte das gleiche problem und fand nicht wirklich klar, aber feine Lösung!