Ich versuche, eine Helvetica Neue Condensed- Schriftart zu verwenden, die ich aus dem Adobe Font Collection Pro-Paket erhalten habe. Leider scheint es falsch zu zeichnen, wenn ich es in einem verwende UILabel
.
Die Zeilenhöhe scheint korrekt berechnet zu sein (glaube ich), aber wenn die Schriftart angezeigt wird, wird sie ganz oben im Begrenzungsrahmen ausgerichtet. Ich habe angerufen [myLabel sizeToFit]
und nur die Breite angepasst, um diese Bildschirmaufnahme zu erstellen:
Ich hatte das gleiche Problem sowohl mit der fetten als auch mit der regulären Version der Schriftart. Ich konnte eine Version von Helvetica Neue Bold aus OSX ziehen und auf mein Gerät übertragen, und es wird gut angezeigt (grüner Hintergrund im obigen Bild).
Was könnte an der Schriftartdatei oder meinem Code falsch sein, die dazu führen würden, dass sie auf diese Weise gezeichnet wird?
Antworten:
Ich stellte eine Lösung , die Schriftart Patchen ttf beinhaltet Datei hier :
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 Befehlszeilenprogramme der Apple Font Tool Suite herunterladen . Nehmen Sie dann Ihre Schriftart und gehen Sie wie folgt vor:
Dies wird erstellen
Bold.hhea.xml
. Öffnen Sie es mit einem Texteditor und erhöhen Sie den Wert desascender
Attributs. 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 das Dienstprogramm dann erneut mit der folgenden Befehlszeile aus, um Ihre Änderungen wieder in der ttf-Datei zusammenzuführen:Verwenden Sie dann einfach die resultierende ttf-Schriftart in Ihrer App.
quelle
Dies ist also eine modifizierte Version von kolyuchiy's Antwort.
Ich habe meine Schriftart mit Glyphen geöffnet und sie dann exportiert, ohne etwas zu ändern. Irgendwie war das Problem der vertikalen Ausrichtung auf magische Weise verschwunden!
Was besser ist, ist, dass die neue Schriftart gut mit Methoden wie spielt
sizeWithFont:
, so dass sie nicht die von Joshua erwähnten Probleme hat .Ich warf einen Blick auf die HHEA-Tabelle mit dem erwähnten Befehl kolyuchiy und bemerkte, dass Glyphen nicht nur das
ascender
, sondern auchlineGap
und modifiziertennumberOfHMetrics
für mich .Hier sind die Rohdaten vor:
und danach:
Die Moral der Geschichte erhöht also nicht nur den Aufstieg, sondern modifiziert auch andere verwandte Werte.
Ich bin kein Typografie-Experte, daher kann ich das Warum und Wie nicht wirklich erklären. Wenn jemand eine bessere Erklärung liefern kann, wäre er sehr dankbar! :) :)
quelle
iOS 6 berücksichtigt die lineGap-Eigenschaft der Schriftart, während iOS 7 sie ignoriert. Daher funktionieren nur benutzerdefinierte Schriftarten mit einer Zeilenlücke von 0 auf beiden Betriebssystemen ordnungsgemäß.
Die Lösung besteht darin, die lineGap 0 zu machen und den Ascender entsprechend größer zu machen. Gemäß der obigen Antwort besteht eine Lösung darin, Glyphen zu importieren und zu exportieren. Beachten Sie jedoch, dass eine zukünftige Version der App diesen "Fehler" beheben kann.
Eine robustere Lösung besteht darin, die Schriftart gemäß diesem Beitrag selbst zu bearbeiten . Speziell,
ftxdumperfuser -t hhea -A d YOUR_FONT.ttf
ascender
Eigenschaft, indem Sie den Wert der Eigenschaft hinzufügenlineGap
. Wenn zum BeispiellineGap
200 undascender
750 ist, machen Sie denascender
950.lineGap
auf 0.ftxdumperfuser -t hhea -A f YOUR_FONT.ttf
Sobald Sie dies getan haben, müssen Sie möglicherweise Ihre Benutzeroberfläche entsprechend anpassen.
quelle
Wir hatten das gleiche Problem mit einer unserer benutzerdefinierten Schriftarten. Wir haben das Problem auch "behoben", indem wir die Eigenschaft font ascender bearbeitet haben. Wir haben jedoch festgestellt, dass dies zu anderen Problemen und Layoutproblemen führte. Zum Beispiel würde die dynamische Einstellung der Zellenhöhe basierend auf der Etikettenhöhe bei Verwendung unserer von Ascender bearbeiteten Schriftart explodieren.
Am Ende haben wir die UIButton-Eigenschaft contentEdgetInsets geändert.
Ich bin mir nicht sicher, welche Methode besser ist, wollte aber nur einen anderen Weg zur Behebung des Problems aufzeigen.
quelle
quelle
Für diejenigen, die OS X El Capitan ausführen und zu diesem Thread kommen, ist möglicherweise aufgefallen, dass die Apple Font Tool Suite (zumindest vorerst) nicht mehr kompatibel ist.
Sie können die von kolyuchiy und Joseph Lin beschriebenen Änderungen jedoch weiterhin mit der kostenlosen Software zur Schriftbearbeitung FontForge durchführen .
Öffnen Sie die Schriftart mit FontForge und wählen Sie im oberen Menü Element aus. Gehen Sie dann zu Schriftinfo> OS / 2> Metriken. Dort möchten Sie die Werte für HHEad Line Gap und HHead Ascent Offset bearbeiten.
Sobald Sie die erforderlichen Änderungen vorgenommen haben, können Sie die Schriftart einfach unter Datei> Schriftarten generieren exportieren und das richtige Schriftformat auswählen
quelle
Dank dieser Antwort habe ich mein Problem mit Glyphen behoben, aber ein bisschen anders.
Ich habe meine Schrift mit Glyphs geöffnet (funktioniert auch mit Glyphs mini) und dort diesen Abschnitt gefunden (dieser von Glyphs mini, um dorthin zu gelangen, drücke den i-Knopf in der rechten oberen Ecke):
Löschen Sie einfach alle diese Ausrichtungszonen (oder einige davon) und das Problem wird behoben. Hat perfekt für mich funktioniert.
quelle
Das Erstellen von zugeordnetem Text aus Ihrem Etikettentext war für mich die Lösung. Hier ist eine Erweiterung:
Für meine benutzerdefinierte Schriftart habe ich das Ergebnis erhalten, das ich benötige von:
Dies funktioniert unter Verwendung des bereitgestellten Native,
NSMutableParagraphStyle()
das@IBOutlet
Eigenschaften für Zeilenhöhe und -abstand enthält (auf die auch im Storyboard als Eigenschaften zugegriffen werden kann, wenn Sie Ihre Beschriftungen nicht programmieren).quelle
Haben Sie Core Text ausprobiert ? Ich hatte einige Erfolge beim Rendern von benutzerdefinierten Schriftarten über Core Text, aber ich weiß nicht, ob dies zu Ihrer Situation passen würde.
quelle
Ich habe https://github.com/fonttools/fonttools verwendet - sehr einfach zu bedienen und kostenlos. In meinem Fall hat die Änderung von 'ascender' = 1000 und 'lineGap' = 0 in der 'hhea'-Tabelle den Trick getan.
Basierend auf einem Artikel von Trevor Harmon https://medium.com/@thetrevorharmon/how-to-use-apples-font-tools-to-tweak-a-font-a386600255ae
quelle
Wenn Sie Probleme mit diesen Befehlszeilenprogrammen haben, versuchen Sie es mit fontcreator im Fenster. und ändern Sie den Schriftarten-Assender aus dem Einstellungsmenü.
quelle
Für alle, die Schwierigkeiten haben,
ftxdumperfuser
( kolyuchiy answer) unter Mac OS Mojave zu verwenden, weil der Befehl Fehler nicht gefunden hat:export PATH="$PATH:$HOME/font-tools/FontCommandLineTools.pkg/Payload"
) oder die Utils in Ihren bin-Ordner kopieren.quelle
Ich hatte ein ähnliches Problem mit der legendären "FontAwesome" -Schrift in meinem Sprite Kit-Spiel. Das Festlegen der SKLabelVerticalAlignmentMode-Eigenschaft von SKLabelNode auf .Center hat für mich funktioniert.
myLabel.verticalAlignmentMode = SKLabelVerticalAlignmentMode.Center
Ich wollte nur teilen, falls jemand mit dem gleichen Problem zu kämpfen hat.
quelle