UIButton özel yazı tipi dikey hizalaması


118

UIButtonGörünümüm yüklendiğinde ayarlanan özel bir yazı tipi kullanan bir hangisi var :

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

Karşılaştığım sorun, yazı tipinin orta çizginin üstünde yüzüyormuş gibi görünmesidir. Bu satırı yorumlarsam, varsayılan yazı tipi dikey olarak ortalanmış olarak görünür. Ancak özel yazı tipine geçmek dikey hizalamayı bozar.

Aynı sorunu özel bir yazı tipiyle bir Tablo Hücresinde de alıyorum.

Görünüme bir yerde özel yazı tipinin diğer yazı tipleri kadar uzun olmadığını söylemem gerekir mi?

DÜZENLEME: Kullandığım yazı tipinin bir Windows TrueType Yazı Tipi olduğunu yeni fark ettim. Mac'teki TextEdit'te iyi kullanabilirim, yalnızca Uygulamamdaki hizalamayla ilgili bir sorun

Düğme metni dikey olarak ortalanmamış


Bu yazı tipiyle aynı sorunu yaşıyorum (.otf, .ttf değil): fontsquirrel.com/fonts/bebas-neue
Neal Ehardt

Yanıtlar:


312

Benzer bir sorun, Özel yüklenen yazı tipinin UILabel'de doğru görüntülenmemesinde tartışıldı . Çözüm verilmedi.

İşte UILabel, UIButton ve benzerlerinde aynı sorunu yaşayan özel yazı tipim için çalışan çözüm. Yazı tipiyle ilgili sorun, yükselen özelliğinin sistem yazı tiplerinin değerine kıyasla çok küçük olmasıydı. Ascender, yazı tipinin karakterlerinin üzerinde dikey bir boşluktur. Yazı tipinizi düzeltmek için Apple Font Tool Suite komut satırı yardımcı programlarını indirmeniz gerekir . Ardından yazı tipinizi alın ve aşağıdakileri yapın:

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

Bu yaratacaktır Bold.hhea.xml. Bir metin düzenleyiciyle açın ve ascenderniteliğin değerini artırın . Sizin için en uygun olan değeri bulmak için biraz denemeniz gerekecek. Benim durumumda, bunu 750'den 1200'e değiştirdim. Ardından, değişikliklerinizi ttf dosyasında yeniden birleştirmek için aşağıdaki komut satırı ile yardımcı programı tekrar çalıştırın:

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

Ardından, uygulamanızda ortaya çıkan ttf yazı tipini kullanın.

OS X El Capitan

Apple Font Tool Suite Installer , ikili dosyaları korumalı bir dizine yüklemeye çalıştığı için SIP nedeniyle OSX El Capitan'da artık çalışmıyor . Manuel olarak çıkarmanız gerekir ftxdumperfuser. İlk sonradan paketten yerel bir dizine dmg gelen pkg kopyalamak OS X Font Tools.pkgile

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

Şimdi fontTools.pkgile klasöre gidin

~$ cd fontTools.pkg/

Yükü şununla çıkarın:

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

Şimdi ftxdumperfuserikili dosya şu anki klasörünüzdedir. /usr/local/bin/Aşağıdakilerle terminal uygulamasının içindeki her klasörde kullanabilmeniz için taşıyabilirsiniz .

~$ mv ftxdumperfuser /usr/local/bin/

4
+1 Harika ipucu! İşte Ascenders and Descenders typophile.com/node/13081
tidwall

35
OTF dosyaları için eşit derecede iyi çalıştı.
mharper

2
Bu çözümle değiştirilmiş özel bir yazı tipi kullanırsanız ve metni, yani birden çok satıra sahip bir UITextView'da ayarlarsanız, satır içi mesafe çok büyük olur.
ahbap

5
İOS 7 beta 6'da yazı tipi hizalama sorununu çözdüklerini buldum. Bu düzeltmeyi yaparsanız, iOS 6'da iyi olacak, ancak iOS 7'de bozuk olacak .... 7 yine de beta sürümünde, yani kim bilir
tybro0103

3
Xcode 9 için yazı tipi araçları güncellendi, High Sierra'ya iyi yüklüyorlar. Doğrudan bağlantı: developer.apple.com/download/more/?=font
Andrés Pizá Bückmann

49

En çok görüntülenen içeriği (başlığı değil!) Ekini ayarlama sorununu çözdüm.

Örneğin: button.contentEdgeInsets = UIEdgeInsetsMake (10.0, 0.0, 0.0, 0.0);

İyi şanslar!


15
Bu benim için yazı tipini düzenlemekten daha kolay görünen iyi ve hızlı bir çözümdü. myButton.titleLabel.font = [UIFont fontWithName: @ "FontName" boyutu: 20.0]; myButton.contentEdgeInsets = UIEdgeInsetsMake (3.0, 0.0, 0.0, 0.0);
Jamie Hamick

Parlak! Teşekkür ederim! Benim sorunum biraz farklıydı, varsayılan yazı tipini kullanan basit + ve - düğmelerim vardı ve ortalanandan daha düşük görünüyorlardı, metni biraz yükseltmek için buradaki çözümü kullanabildim, böylece göze çarpmadı.
Patrick T Nelson

7

Yazı tipinize bağlı olabileceği için bunun yardımcı olup olmayacağından emin değilim, ancak taban çizginizin yanlış hizalanmış olması olabilir.

self.searchButton.titleLabel.baselineAdjustment = 
    UIBaselineAdjustmentAlignCenters;

3
Yazı tipi boyutu minimumScaleFactor ile ayarlandığında bir UIB düğmesi için bir titleLabel üzerinde harika çalışıyor
smitt04


2

Bunu Interface Builder'da deneyebilirsiniz. İşte nasıl yapılacağına dair bir anlık görüntü -

görüntü açıklamasını buraya girin görüntü açıklamasını buraya girin

Gördüğünüz gibi, IB'de bunu yapmaya çalışmanın kendi yararları vardır.


1
Bu ayar zaten mevcuttur ve IB'de yazı tipi dikey olarak gösterilir, ancak varsayılan yazı tipi olarak gösterilir. Yalnızca uygulamamı çalıştırdığımda özel yazı tipi yüzüm ortaya çıkıyor ve dikey olarak ortalanmıyor
Pete

IB'de "özel yazı tipinizi" ayarlıyor musunuz? iOS yazı tiplerinde destekleniyor mu?
Srikar Appalaraju

Yazı tipi IB'de ve ayrıca orijinal yazımda belirtilen kodla ayarlanır. IB'deki yazı tipi seçme açılır menüsünde görünmesine rağmen, aslında IB ekran modelinde görünmüyor.
Pete

2

Partiye geç kaldım, ancak bu sorun beni Nth kez vurduğu için, bulduğum en basit çözümü yayınlayacağımı düşündüm : Python FontTools'u kullanarak .

  1. Sisteminizde mevcut değilse Python 3'ü yükleyin.

  2. FontTools'u yükleyin

    pip3 install fonttools

    FontTools , XML'e ve XML'den dönüştürmeyi sağlayan bir TTX aracı içerir.

  3. Yazı tipinizi aynı klasörde .ttx'e dönüştürün

    ttx myFontFile.otf

  4. .Ttx için gerekli düzenlemeleri yapın ve .otf dosyasını silin, çünkü bu sonraki adımda değiştirilecektir.

  5. Dosyayı tekrar .otf biçimine dönüştürün

    ttx myFontFile.ttx


Motivasyon: kolyuchi tarafından çözüm tam değildir ve hatta birlikte bu genişletilmiş yükleme akışı , çalışıyor ftxdumperfuser10.15.2 Catalina bir hata sonuçlandı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.