Vertikale Ausrichtung der benutzerdefinierten UIButton-Schriftart

118

Ich habe eine, UIButtondie eine benutzerdefinierte Schriftart verwendet, die beim Laden meiner Ansicht festgelegt wird:

- (void)viewDidLoad
{
    [super viewDidLoad];    
    self.searchButton.titleLabel.font = [UIFont fontWithName: @"FONTNAME" size: 15.0 ];
}

Das Problem, das ich habe, ist, dass die Schriftart scheinbar über der Mittellinie schwebt. Wenn ich diese Zeile auskommentiere, wird die Standardschrift gut vertikal zentriert angezeigt. Wenn Sie jedoch zur benutzerdefinierten Schriftart wechseln, wird die vertikale Ausrichtung unterbrochen.

Ich bekomme das gleiche Problem auch bei einer Tabellenzelle mit einer benutzerdefinierten Schriftart.

Muss ich der Ansicht irgendwo mitteilen, dass die benutzerdefinierte Schriftart nicht so hoch ist wie andere Schriftarten?

BEARBEITEN: Ich habe gerade festgestellt, dass die von mir verwendete Schriftart eine Windows TrueType-Schriftart ist. Ich kann es gut in TextEdit auf dem Mac verwenden, nur ein Problem mit der Ausrichtung in meiner App

Schaltflächentext nicht vertikal zentriert

Pete
quelle
Ich habe das gleiche Problem mit dieser Schriftart (.otf, nicht .ttf): fontsquirrel.com/fonts/bebas-neue
Neal Ehardt

Antworten:

312

Ein ähnliches Problem wurde unter Benutzerdefinierte installierte Schriftart diskutiert , die in UILabel nicht korrekt angezeigt wird . Es wurde keine Lösung angegeben.

Hier ist die Lösung, die für meine benutzerdefinierte Schriftart funktioniert hat, bei der das gleiche Problem in UILabel, UIButton usw. aufgetreten ist. Das Problem mit der Schriftart war die Tatsache, dass ihre Ascender-Eigenschaft im Vergleich zum Wert von Systemschriftarten zu klein war. Ascender ist ein vertikales Leerzeichen über den Schriftzeichen. Um Ihre Schriftart zu korrigieren, müssen Sie die Befehlszeilendienstprogramme der Apple Font Tool Suite herunterladen . Nehmen Sie dann Ihre Schriftart und gehen Sie wie folgt vor:

~$ ftxdumperfuser -t hhea -A d Bold.ttf

Dies wird erstellen Bold.hhea.xml. Öffnen Sie es mit einem Texteditor und erhöhen Sie den Wert des ascenderAttributs. Sie müssen ein wenig experimentieren, um den genauen Wert herauszufinden, der für Sie am besten geeignet ist. In meinem Fall habe ich es von 750 auf 1200 geändert. Führen Sie dann das Dienstprogramm erneut mit der folgenden Befehlszeile aus, um Ihre Änderungen wieder in der ttf-Datei zusammenzuführen:

~$ ftxdumperfuser -t hhea -A f Bold.ttf

Verwenden Sie dann einfach die resultierende ttf-Schriftart in Ihrer App.

OS X El Capitan

Das Apple Font Tool Suite-Installationsprogramm funktioniert unter OSX El Capitan aufgrund von SIP nicht mehr, da versucht wird, die Binärdateien in einem geschützten Verzeichnis zu installieren. Sie müssen manuell extrahieren ftxdumperfuser. Kopieren Sie zuerst das Paket aus dem dmg in ein lokales Verzeichnis und entpacken Sie anschließend das OS X Font Tools.pkgmit

~$ xar -xf OS\ X\ Font\ Tools.pkg

Navigieren Sie nun in den Ordner fontTools.pkgmit

~$ cd fontTools.pkg/

Nutzlast mit extrahieren

~$ cat Payload | gunzip -dc | cpio -i

Jetzt befindet sich die ftxdumperfuserBinärdatei in Ihrem aktuellen Ordner. Sie können es wie /usr/local/bin/folgt verschieben, damit Sie es in jedem Ordner innerhalb der Terminalanwendung verwenden können.

~$ mv ftxdumperfuser /usr/local/bin/
kolyuchiy
quelle
4
+1 Toller Tipp! Hier sind einige Informationen über Auf-
tidwall
35
Funktionierte genauso gut für OTF-Dateien.
mharper
2
Wenn Sie eine mit dieser Lösung geänderte benutzerdefinierte Schriftart verwenden und Text festlegen, dh in einer UITextView mit mehreren Zeilen, wird der Abstand zwischen den Zeilen viel zu groß.
Der Typ
5
Ich habe festgestellt, dass in iOS 7 Beta 6 das Problem mit der Schriftausrichtung behoben wurde. Wenn Sie dieses Update durchführen, ist es in iOS 6 gut, in iOS 7 jedoch defekt. 7 befindet sich jedoch noch in der Beta, also wer weiß
tybro0103
3
Die Schriftwerkzeuge wurden für Xcode 9 aktualisiert und können problemlos in High Sierra installiert werden. Direkter Link: developer.apple.com/download/more/?=font
Andrés Pizá Bückmann
49

Ich habe das Problem beim Anpassen des oberen Inhalts (nicht des Titels!) Inset gelöst.

Zum Beispiel: button.contentEdgeInsets = UIEdgeInsetsMake (10.0, 0.0, 0.0, 0.0);

Viel Glück!

Jordi Corominas
quelle
15
Dies war eine gute schnelle Lösung für mich, die einfacher schien als der Versuch, die Schriftart zu bearbeiten. myButton.titleLabel.font = [UIFont fontWithName: @ "FontName" Größe: 20.0]; myButton.contentEdgeInsets = UIEdgeInsetsMake (3.0, 0.0, 0.0, 0.0);
Jamie Hamick
Brillant! Danke dir! Mein Problem war etwas anders, ich hatte einfache + und - Schaltflächen mit der Standardschrift und sie erschienen niedriger als zentriert. Ich konnte die Lösung hier verwenden, um den Text leicht anzuheben, damit er nicht abschaute.
Patrick T Nelson
7

Sie sind sich nicht sicher, ob dies hilfreich sein wird, da dies möglicherweise von Ihrer Schriftart abhängt. Möglicherweise ist Ihre Grundlinie jedoch falsch ausgerichtet.

self.searchButton.titleLabel.baselineAdjustment = 
    UIBaselineAdjustmentAlignCenters;
Matten
quelle
3
Funktioniert hervorragend auf einem titleLabel für einen UIButton, wenn die Schriftgröße mit MinimumScaleFactor angepasst wird
smitt04
2

Sie können dies im Interface Builder ausprobieren. Hier ist eine Momentaufnahme, wie es geht -

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, hat der Versuch, dies in IB zu tun, seine eigenen Vorteile.

Srikar Appalaraju
quelle
1
Diese Einstellung ist bereits vorhanden, und in IB wird die Schriftart vertikal angezeigt, jedoch als Standardschriftart. Nur wenn ich meine App starte, wird mein benutzerdefiniertes Schriftbild angezeigt und es ist nicht vertikal zentriert
Pete
Stellen Sie Ihre "benutzerdefinierte Schriftart" in IB ein? Wird es in iOS-Schriftarten unterstützt?
Srikar Appalaraju
Die Schriftart wird in IB und auch durch den Code festgelegt, der in meinem ursprünglichen Beitrag angegeben ist. Es wird nicht im IB-Bildschirmmodell angezeigt, obwohl es in der Dropdown-Liste für die Schriftartenauswahl in IB angezeigt wird.
Pete
2

Spät zur Party, aber als mich dieses Problem zum neunten Mal traf, dachte ich, ich würde die einfachste Lösung veröffentlichen, die ich gefunden habe: die Verwendung von Python FontTools .

  1. Installieren Sie Python 3, wenn es auf Ihrem System nicht verfügbar ist.

  2. Installieren Sie FontTools

    pip3 install fonttools

    FontTools enthalten ein TTX-Tool, das die Konvertierung in und aus XML ermöglicht.

  3. Konvertieren Sie Ihre Schriftart im selben Ordner in .ttx

    ttx myFontFile.otf

  4. Nehmen Sie die erforderlichen Änderungen an .ttx vor und löschen Sie die .otf-Datei, da diese im nächsten Schritt ersetzt wird.

  5. Konvertieren Sie die Datei zurück in .otf

    ttx myFontFile.ttx


Motivation: Die Lösung von kolyuchi ist unvollständig, und selbst bei diesem erweiterten Installationsablauf führte das Ausführen ftxdumperfuserzu einem Fehler in Catalina 10.15.2.

NiFi
quelle