Ich habe eine benutzerdefinierte Schriftart, die ich für alles verwenden möchte, was Text in meiner App, Beschriftungen, Textansichten usw. anzeigt.
Gibt es eine Möglichkeit, die Standardschriftart (Beschriftungen verwenden standardmäßig SystemFont) für die gesamte App festzulegen?
IBDesignable
diese Tage unbedingt benutzen musst . Ich hoffe es hilft. Beachten SieAntworten:
In iOS 5 scheint die Verwendung des UIAppearance-Proxys möglich zu sein.
Dadurch wird die Schriftart so eingestellt, wie es Ihre benutzerdefinierte Schriftart für alle UILabels in Ihrer App ist. Sie müssen es für jedes Steuerelement (UIButton, UILabel usw.) wiederholen.
Denken Sie daran, dass Sie den UIAppFonts-Wert in Ihre info.plist einfügen und den Namen der Schriftart angeben müssen, die Sie einschließen.
quelle
setFont:
Methode ist veraltetUILabel
. Es ist veraltet,UIButton
aber es wird stattdessen die Schriftart für dietitleLabel
Eigenschaft verwendet, die a ist.UILabel
DaherUILabel
sollte es in Ordnung sein , nur die Schriftart mit dem Erscheinungs-Proxy für festzulegen.Swift 5
Basierend auf der Antwort von Fábio Oliveira ( https://stackoverflow.com/a/23042694/2082851 ) mache ich meine eigene schnelle 4.
Kurz gesagt, diese Erweiterung tauschen Standardfunktionen
init(coder:)
,systemFont(ofSize:)
,boldSystemFont(ofSize:)
,italicSystemFont(ofSize:)
mit meinen benutzerdefinierten Methoden.Beachten Sie, dass es nicht vollständig implementiert ist, aber Sie können weitere Methoden basierend auf meiner Implementierung austauschen.
quelle
if let fontAttribute = fontDescriptor.fontAttributes[.nsctFontUIUsage] as? String {
hat den Trick für mich getan.UILabel
s zu funktionieren, die den Textstil festlegen (Fettdruck, Überschrift, Titel usw.) ... funktioniert nur mit Schriftarten, für die eine bestimmte Größe und Systemschriftart festgelegt ist. @ nahung89Es gibt auch eine andere Lösung, die darin besteht, systemFont zu überschreiben.
Erstellen Sie einfach eine Kategorie
UIFont + SystemFontOverride.h
UIFont + SystemFontOverride.m
Dies ersetzt die Standardimplementierung und die meisten UIControls verwenden systemFont.
quelle
Wenn Sie Swift verwenden, können Sie eine UILabel-Erweiterung erstellen:
Und dann, wo Sie Ihren Auftritt als Stellvertreter machen:
Es gibt einen äquivalenten Objective-C-Code, der
UI_APPEARANCE_SELECTOR
für eine Eigenschaft mit dem Namen verwendet wirdsubstituteFontName
.Zusatz
Für den Fall, dass Sie fett gedruckte und reguläre Schriftarten separat festlegen möchten:
Dann für Ihre UIAppearance-Proxys:
Hinweis: Wenn Sie feststellen, dass die fettgedruckte Ersetzung nicht funktioniert, enthält der Standardschriftname möglicherweise nicht "Mittel". Schalten Sie diese Zeichenfolge nach Bedarf für ein anderes Spiel aus (danke an Mason in den Kommentaren unten).
quelle
UILabel
Erweiterung wahrscheinlich so einrichten , dass ein zusätzlicher Schriftname für Fettdruck verwendet wird.set
Überprüfen Sie dann im Do, ob "Bold" im Schriftnamen enthalten ist, ignorieren Sie das Set in einem Fall und verwenden Sie es in dem anderen. Ich werde ein Beispiel bearbeiten und hinzufügen.rangeOfString("Medium")
und es hat funktioniert.Aus der Antwort von Hugues BR entwickelt, aber mithilfe der Methode Swizzling bin ich zu einer Lösung gekommen, bei der alle Schriftarten in meiner App erfolgreich in eine gewünschte Schriftart geändert werden.
Ein Ansatz mit Dynamic Type sollte das sein, wonach Sie unter iOS 7 suchen sollten. Die folgende Lösung verwendet Dynamic Type nicht.
Anmerkungen:
- initWithCoder:
Überschreibung. Dies wird jedoch nicht alle Fälle abdecken.Diese Lösung verwendet zwei verschiedene Methoden, um das Endergebnis zu erzielen. Die erste besteht darin, die UIFont-Klassenmethoden
+ systemFontWithSize:
und ähnliche Methoden mit denen zu überschreiben , die meine Alternativen verwenden (hier verwende ich "Zapfino", um keine Zweifel daran zu lassen, dass die Ersetzung erfolgreich war).Die andere Methode besteht darin, die
- initWithCoder:
Methode in UIFont zu überschreiben, um das AuftretenCTFontRegularUsage
und Ähnliches meiner Alternativen zu ersetzen . Diese letzte Methode war notwendig, da ich festgestellt habe, dassUILabel
in NIB-Dateien codierte Objekte die+ systemFontWithSize:
Methoden nicht überprüfen , um ihre Systemschrift zu erhalten, und sie stattdessen alsUICTFontDescriptor
Objekte codieren . Ich habe versucht zu überschreiben,- awakeAfterUsingCoder:
aber irgendwie wurde es für jedes verschlüsselte Objekt in meinem Storyboard aufgerufen und verursachte Abstürze. Das Überschreiben- awakeFromNib
würde mir nicht erlauben, dasNSCoder
Objekt zu lesen .quelle
UIAlertController
ändern modals ( ) unter iOS 8 die Schriftart nicht.Um die Antwort von Sandy Chapman zu vervollständigen , finden Sie hier eine Lösung in Ziel-C (platzieren Sie diese Kategorie an einer beliebigen Stelle, an der Sie sie ändern möchten
UILabel
Appearance
):In der Schnittstellendatei sollte diese Methode öffentlich deklariert sein, damit sie später von Orten wie Ihrem App-Delegaten verwendet werden kann:
Dann können Sie das ändern
Appearance
mit:quelle
KOMMENTAR FÜR SWIFT 3.0 UND SWIFT WARNUNG
Sie können die Warnmeldung in der folgenden Zeile entfernen:
Durch Ersetzen durch:
quelle
Für Swift 5
Alle oben genannten Antworten sind korrekt, aber ich habe es auf wenig andere Weise getan, je nach Gerätegröße . Hier in der ATFontManager-Klasse habe ich die Standardschriftgröße festgelegt, die oben in der Klasse als defaultFontSize definiert wird. Dies ist die Schriftgröße von iphone plus und Sie können sie gemäß Ihren Anforderungen ändern.
Ich habe einen bestimmten Schriftnamen hinzugefügt. Weitere Informationen finden Sie hier.
Diese Klasse bezieht sich auf den Gerätedetektor, um je nach Gerät eine geeignete Schriftgröße bereitzustellen.
Wie benutzt man. Hoffe es wird helfen.
quelle
Keine dieser Lösungen funktioniert universell in der gesamten App. Eine Sache, die ich beim Verwalten der Schriftarten in Xcode gefunden habe, ist das Öffnen des Storyboards als Quellcode (Klicken Sie bei gedrückter Ctrl-Taste auf das Storyboard im Datei-Navigator> "Öffnen als"> "Quelle") und das anschließende Suchen und Ersetzen.
quelle
Die Schriftart muss immer in Code und Feder / Storyboard festgelegt werden.
Für den Code, genau wie Hugues BR sagte , kann dies in der Kategorie das Problem lösen.
Für die Feder / das Storyboard können wir awizzFromNib mit Swizzling ändern, um den Schrifttyp zu ändern, da das UI-Element von der Feder / dem Storyboard es immer aufruft, bevor es auf dem Bildschirm angezeigt wird.
Ich nehme an, Sie kennen Aspekte. Es ist eine Bibliothek für die AOP-Programmierung, die auf Method Swizzling basiert. Wir erstellen eine Kategorie für UILabel, UIButton, UITextView, um sie zu implementieren.
UILabel:
UIButton:
UITextField:
UITextView:
Das ist alles, Sie können HelveticaNeue-light in ein Makro mit Ihrem Schriftnamen ändern.
quelle
Ich habe meine eigene Konvertierung der Typografie für Swift 4 erstellt, nachdem ich einige Beiträge überprüft habe. Sie deckt die meisten Fälle ab, z.
1. Fügen Sie der Projektstruktur und der .plist-Datei (mit demselben Namen) Schriftarten hinzu:
Dann
Rufen Sie zum Schluss die erstellte Methode
Appdelegate
wie folgt auf:quelle
Wahrscheinlich nicht, wahrscheinlich haben Sie die Schriftart selbst in Ihrem Steuerelement festgelegt, aber Sie können den Vorgang vereinfachen, indem Sie zentralisieren, woher Sie die Schriftarten beziehen. Lassen Sie beispielsweise den App-Delegaten oder eine andere allgemeine Klasse eine Methode haben, die die zurückgibt Schriftart und alles, was zum Festlegen der Schriftart benötigt wird, kann diese Methode aufrufen. Dies hilft, wenn Sie Ihre Schriftart ändern müssen. Sie müssen sie an einer Stelle ändern und nicht überall, wo Sie die Schriftarten festlegen. Eine andere Alternative kann darin bestehen, Unterklassen von zu erstellen Ihre UI-Elemente, die die Schriftart automatisch festlegen, aber möglicherweise übertrieben sind.
quelle
NUI ist eine Alternative zum UIAppearance-Proxy. Sie können die Schriftart (und viele andere Attribute) einer großen Anzahl von UI-Elementtypen in Ihrer Anwendung steuern, indem Sie einfach ein Stylesheet ändern, das für mehrere Anwendungen wiederverwendet werden kann.
Nachdem
NUILabel
Sie Ihren Beschriftungen eine Klasse hinzugefügt haben , können Sie deren Schriftart im Stylesheet leicht steuern:Wenn Sie Beschriftungen mit unterschiedlichen Schriftgrößen haben, können Sie deren Größe mithilfe der NUI-Klassen Label, LargeLabel und SmallLabel steuern oder sogar schnell eigene Klassen erstellen.
quelle
Ich benutze wie diese Art von Schriftklasse in Swift. Verwenden der Font-Erweiterungsklasse.
quelle
Für Xamarin.iOS in AppDelegates
FinishedLaunching()
Put-Code wie folgt : -UIAppFonts
Legen Sie die Schriftart für die gesamte Anwendung fest und fügen Sie in der Info.plist den Schlüssel ' ' hinzu. Der Pfad sollte der Pfad sein, in dem sich Ihre Schriftartdatei .ttf befindet. Für mich befand sie sich in meinem Projekt im Ordner 'fonts'.quelle
Wie @Randall erwähnt iOS 5.0+
UIApperance
Proxy kann das Aussehen aller Instanzen einer Klasse anpassen verwendet werden , lesen Sie mehr .Die automatische Vervollständigung von Xcodes zeigt nicht alle verfügbaren Eigenschaften an und kann einen Fehler auslösen. Sie können ihn jedoch einfach eingeben und er wird kompiliert.
quelle
Dasselbe haben wir in Swift-Xcode 7.2 mit Parent View Controller und Child View Controller (Inheritance) erreicht.
Datei - Neu - Cocoa Touch-Klasse - ParentViewController.
Erstellen Sie untergeordnete Ansichtscontroller und verknüpfen Sie sie mit einem StoryBoard VC. Fügen Sie ein textLabel hinzu.
ODER Erstellen Sie eine benutzerdefinierte UILabel-Klasse (Subklassifizierungsmethode) und ordnen Sie ihr die erforderlichen Beschriftungen zu.
Hinweis: Die in Parent VC deklarierte Schriftart und Farbe sind in CustomFontLabel implementiert. Der Vorteil ist, dass wir die Eigenschaften von uilabel / any view zusammen in einigen einfachen Änderungen in Parent VC ändern können.
2) 'for' Schleife UIView für Unteransichten. Es funktioniert nur auf einem bestimmten VC.
quelle