Perataan vertikal font khusus UIButton

118

Saya mendapatkan UIButtonyang menggunakan font khusus, yang disetel saat tampilan saya dimuat:

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

Masalah yang saya hadapi adalah font tampak melayang di atas garis tengah. Jika saya mengomentari baris ini, font default muncul di tengah vertikal dengan baik. Tetapi mengubah ke font kustom akan merusak perataan vertikal.

Saya mendapatkan masalah yang sama pada Sel Tabel dengan font khusus juga.

Apakah saya perlu memberi tahu tampilan di suatu tempat bahwa font kustom tidak setinggi font lainnya?

EDIT: Saya baru saja menyadari bahwa font yang saya gunakan adalah Windows TrueType Font. Saya dapat menggunakannya dengan baik di TextEdit di Mac, hanya masalah dengan penyelarasan di App saya

Teks tombol tidak berada di tengah secara vertikal

Pete
sumber
Saya mengalami masalah yang sama dengan font ini (.otf, bukan .ttf): fontquirrel.com/fonts/bebas-neue
Neal Ehardt

Jawaban:

312

Masalah serupa telah dibahas di Font yang dipasang khusus tidak ditampilkan dengan benar di UILabel . Tidak ada solusi yang diberikan.

Inilah solusi yang berfungsi untuk font khusus saya yang memiliki masalah yang sama di UILabel, UIButton dan semacamnya. Masalah dengan font ternyata fakta bahwa properti ascender terlalu kecil dibandingkan dengan nilai font sistem. Ascender adalah spasi vertikal di atas karakter font. Untuk memperbaiki font Anda, Anda harus mengunduh utilitas baris perintah Apple Font Tool Suite . Kemudian ambil font Anda dan lakukan hal berikut:

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

Ini akan membuat Bold.hhea.xml. Buka dengan editor teks dan tingkatkan nilai ascenderatribut. Anda harus sedikit bereksperimen untuk mengetahui nilai pasti yang paling sesuai untuk Anda. Dalam kasus saya, saya mengubahnya dari 750 menjadi 1200. Kemudian jalankan utilitas lagi dengan baris perintah berikut untuk menggabungkan perubahan Anda kembali ke file ttf:

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

Kemudian gunakan saja font ttf yang dihasilkan di aplikasi Anda.

OS X El Capitan

Penginstal Apple Font Tool Suite tidak berfungsi lagi di OSX El Capitan karena SIP karena mencoba menginstal file biner ke direktori yang dilindungi. Anda harus mengekstrak secara manual ftxdumperfuser. Pertama salin pkg dari dmg ke direktori lokal setelah itu ekstrak OS X Font Tools.pkgwith

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

Sekarang arahkan ke folder fontTools.pkgdengan

~$ cd fontTools.pkg/

Ekstrak muatan dengan

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

Sekarang ftxdumperfuserbiner ada di folder Anda saat ini. Anda dapat memindahkannya ke /usr/local/bin/sehingga Anda dapat menggunakannya di setiap folder di dalam aplikasi terminal dengan yang berikut ini.

~$ mv ftxdumperfuser /usr/local/bin/
kolyuchiy.dll
sumber
4
+1 Tip bagus! Berikut beberapa info tentang Ascenders and Descenders typophile.com/node/13081
tidwall
35
Bekerja sama baiknya untuk file OTF.
mharper
2
Jika Anda menggunakan font khusus yang dimodifikasi dengan solusi ini, dan Anda menyetel teks yaitu dalam UITextView dengan beberapa baris, jarak antar baris menjadi terlalu besar.
Pria itu
5
Saya telah menemukan bahwa di iOS 7 beta 6, mereka telah memperbaiki masalah penyelarasan font. Jadi jika Anda melakukan perbaikan ini, itu akan bagus di iOS 6, tetapi rusak di iOS 7 .... 7 masih dalam versi beta, jadi siapa tahu
tybro0103
3
Alat font telah diperbarui untuk Xcode 9, mereka terpasang dengan baik di High Sierra. Tautan langsung: developer.apple.com/download/more/?=font
Andrés Pizá Bückmann
49

Saya memecahkan masalah menyesuaikan inset konten teratas (bukan judul!).

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

Semoga berhasil!

Jordi Corominas
sumber
15
Ini adalah solusi cepat yang bagus untuk saya yang tampaknya lebih sederhana daripada mencoba mengedit font. myButton.titleLabel.font = [UIFont fontWithName: @ "FontName" ukuran: 20.0]; myButton.contentEdgeInsets = UIEdgeInsetsMake (3.0, 0.0, 0.0, 0.0);
Jamie Hamick
Cemerlang! Terima kasih! Masalah saya sedikit berbeda, saya memiliki tombol + dan - sederhana yang menggunakan font default dan tombol tersebut muncul lebih rendah daripada di tengah, saya dapat menggunakan solusi di sini untuk menaikkan teks sedikit sehingga tidak terlihat off.
Patrick T Nelson
7

Tidak yakin apakah ini akan membantu karena mungkin tergantung pada font Anda, tetapi bisa jadi garis dasar Anda tidak sejajar.

self.searchButton.titleLabel.baselineAdjustment = 
    UIBaselineAdjustmentAlignCenters;
Tikar
sumber
3
Berfungsi dengan baik pada titleLabel untuk UIButton ketika ukuran font disesuaikan dengan minimumScaleFactor
smitt04
2

Anda dapat mencobanya di Interface Builder. Berikut ini gambaran singkat tentang cara melakukannya -

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Seperti yang Anda lihat, mencoba melakukan ini di IB memiliki keuntungan tersendiri.

Srikar Appalaraju
sumber
1
Pengaturan itu sudah ada, dan di IB font ditampilkan secara vertikal, tetapi ditampilkan sebagai font default. Hanya ketika saya menjalankan aplikasi saya, tampilan font khusus saya muncul, dan tidak berada di tengah secara vertikal
Pete
apakah Anda mengatur "font khusus" Anda di IB? apakah itu didukung dalam font iOS?
Srikar Appalaraju
Font diatur dalam IB, dan juga dengan kode yang ditentukan di dalam posting asli saya. Itu tidak benar-benar muncul di mockup layar IB, meskipun itu muncul di drop-down pemilihan font di IB.
Pete
2

Terlambat ke pesta, tetapi karena masalah ini menghantam saya untuk ke-N kalinya, saya pikir saya akan memposting solusi paling sederhana yang saya temukan: menggunakan Python FontTools .

  1. Instal Python 3 jika tidak tersedia di sistem Anda.

  2. Pasang FontTools

    pip3 install fonttools

    FontTools menyertakan alat TTX yang memungkinkan konversi ke dan dari XML.

  3. Ubah font Anda menjadi .ttx di folder yang sama

    ttx myFontFile.otf

  4. Lakukan pengeditan yang diperlukan untuk .ttx dan hapus file .otf karena ini akan diganti di langkah berikutnya.

  5. Konversikan file kembali ke .otf

    ttx myFontFile.ttx


Motivasi: The solusi dengan kolyuchi tidak lengkap, dan bahkan dengan aliran instalasi diperpanjang ini , berjalan ftxdumperfusermengakibatkan kesalahan pada 10.15.2 Catalina.

NiFi
sumber