Benutzerdefinierte Schriftgröße in XCode6-Größenklassen funktioniert 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.
InformationsquelleAutor der Frage mnemia | 2014-10-02
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
InformationsquelleAutor der Antwort razor28
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-ArtikelInformationsquelleAutor der Antwort Robert Chen
Abhilfe 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.InformationsquelleAutor der Antwort Phil
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.
InformationsquelleAutor der Antwort joakim
Ä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
InformationsquelleAutor der Antwort Vitaly
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
InformationsquelleAutor der Antwort Foti Dim
Das problem ist immer noch da, 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.
InformationsquelleAutor der Antwort Nirmit Dagly
Keines dieser arbeitete für mich, aber diese Tat.
Sie müssen auch verwenden Sie die system-schriftart in IB
InformationsquelleAutor der Antwort Jules
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.
InformationsquelleAutor der Antwort Max Smirnov
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:
InformationsquelleAutor der Antwort benjam
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.
InformationsquelleAutor der Antwort kakopappa
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.
InformationsquelleAutor der Antwort Heps
Ich hatte das gleiche problem und fand nicht wirklich klar, aber feine Lösung!
InformationsquelleAutor der Antwort serg_ov
InformationsquelleAutor der Antwort user2612184