Căn chỉnh dọc phông chữ tùy chỉnh UIButton


118

Tôi có một UIButtonphông chữ sử dụng phông chữ tùy chỉnh, được đặt khi chế độ xem của tôi tải:

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

Vấn đề mà tôi gặp phải là phông chữ xuất hiện nổi lên trên đường trung tâm. Nếu tôi nhận xét dòng này, phông chữ mặc định sẽ xuất hiện ở giữa theo chiều dọc. Nhưng việc thay đổi sang phông chữ tùy chỉnh sẽ phá vỡ sự liên kết dọc.

Tôi cũng gặp phải vấn đề tương tự trên Ô bảng có phông chữ tùy chỉnh.

Tôi có cần phải nói với chế độ xem ở đâu đó rằng phông chữ tùy chỉnh không cao bằng các phông chữ khác không?

CHỈNH SỬA: Tôi vừa nhận ra rằng phông chữ tôi đang sử dụng là Phông chữ TrueType của Windows. Tôi có thể sử dụng nó tốt trong TextEdit trên Mac, chỉ có vấn đề với căn chỉnh trong Ứng dụng của tôi

Văn bản nút không được căn giữa theo chiều dọc


Tôi gặp vấn đề tương tự với font chữ này (.otf, không .ttf): fontsquirrel.com/fonts/bebas-neue
Neal Ehardt

Câu trả lời:


312

Một vấn đề tương tự đã được thảo luận tại Phông chữ được cài đặt tùy chỉnh không được hiển thị chính xác trong UILabel . Không có giải pháp nào được đưa ra.

Đây là giải pháp phù hợp với phông chữ tùy chỉnh của tôi có cùng vấn đề trong UILabel, UIButton, v.v. Vấn đề với phông chữ hóa ra là do thuộc tính ascender của nó quá nhỏ so với giá trị của phông chữ hệ thống. Ascender là một khoảng trắng dọc phía trên các ký tự của phông chữ. Để sửa phông chữ của bạn, bạn sẽ phải tải xuống các tiện ích dòng lệnh của Apple Font Tool Suite . Sau đó lấy phông chữ của bạn và làm như sau:

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

Điều này sẽ tạo ra Bold.hhea.xml. Mở nó bằng một trình soạn thảo văn bản và tăng giá trị của ascenderthuộc tính. Bạn sẽ phải thử nghiệm một chút để tìm ra giá trị chính xác phù hợp nhất với mình. Trong trường hợp của tôi, tôi đã thay đổi nó từ 750 thành 1200. Sau đó, chạy lại tiện ích với dòng lệnh sau để hợp nhất các thay đổi của bạn trở lại tệp ttf:

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

Sau đó, chỉ cần sử dụng phông chữ ttf kết quả trong ứng dụng của bạn.

OS X El Capitan

Trình cài đặt Bộ công cụ Phông chữ của Apple không hoạt động nữa trên OSX El Capitan do SIP vì nó cố gắng cài đặt các tệp nhị phân vào một thư mục được bảo vệ. Bạn phải giải nén thủ công ftxdumperfuser. Đầu tiên copy pkg từ dmg vào một thư mục địa phương sau đó giải nén các OS X Font Tools.pkgvới

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

Bây giờ điều hướng vào thư mục fontTools.pkgvới

~$ cd fontTools.pkg/

Giải nén tải trọng với

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

Bây giờ ftxdumperfusertệp nhị phân nằm trong thư mục hiện tại của bạn. Bạn có thể di chuyển nó đến /usr/local/bin/để có thể sử dụng nó trong mọi thư mục bên trong ứng dụng đầu cuối với phần sau.

~$ mv ftxdumperfuser /usr/local/bin/

4
+1 Mẹo hay! Dưới đây là một số thông tin về Ascenders và xuống của typophile.com/node/13081
tidwall

35
Hoạt động tốt như nhau đối với các tệp OTF.
mharper

2
Nếu bạn sử dụng phông chữ tùy chỉnh được sửa đổi bằng giải pháp này và bạn đặt văn bản tức là trong UITextView có nhiều dòng, khoảng cách giữa các dòng sẽ trở nên quá lớn.
The dude

5
Tôi thấy rằng trong iOS 7 beta 6, họ đã khắc phục sự cố căn chỉnh phông chữ. Vì vậy, nếu bạn làm sửa chữa này, nó sẽ được tốt trong iOS 6, nhưng bị phá vỡ trong iOS 7 .... 7 vẫn đang trong phiên bản beta mặc dù, vì vậy ai mà biết được
tybro0103

3
Các công cụ phông chữ đã được cập nhật cho Xcode 9, chúng cài đặt tốt trên High Sierra. Liên kết trực tiếp: developer.apple.com/download/more/?=font
Andrés Pizá Bückmann

49

Tôi đã giải quyết vấn đề khi điều chỉnh nội dung trên cùng (không phải tiêu đề!).

Ví dụ: button.contentEdgeInsets = UIEdgeInsetsMake (10.0, 0.0, 0.0, 0.0);

Chúc may mắn!


15
Đây là một giải pháp nhanh chóng tốt cho tôi, nó có vẻ đơn giản hơn việc cố gắng chỉnh sửa phông chữ. myButton.titleLabel.font = [UIFont fontWithName: @ "FontName" kích thước: 20.0]; myButton.contentEdgeInsets = UIEdgeInsetsMake (3.0, 0.0, 0.0, 0.0);
Jamie Hamick,

Xuất sắc! Cảm ơn bạn! Vấn đề của tôi hơi khác, tôi có các nút + và - đơn giản sử dụng phông chữ mặc định và chúng xuất hiện thấp hơn căn giữa, tôi có thể sử dụng giải pháp ở đây để nâng văn bản lên một chút để nó không bị lệch.
Patrick T Nelson

7

Không chắc liệu điều này có hữu ích không vì nó có thể phụ thuộc vào phông chữ của bạn, nhưng có thể đường cơ sở của bạn bị lệch.

self.searchButton.titleLabel.baselineAdjustment = 
    UIBaselineAdjustmentAlignCenters;

3
Hoạt động tốt trên tiêu đề Nhãn cho giao diện người dùng khi kích thước phông chữ đang được điều chỉnh với tối thiểuScaleFactor
smitt04


2

Bạn có thể thử điều này trong Trình tạo giao diện. Đây là ảnh chụp nhanh về cách thực hiện -

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Như bạn có thể thấy cố gắng làm điều này trong IB có những lợi ích riêng của nó.


1
Cài đặt đó đã có sẵn và trong IB, phông chữ hiển thị theo chiều dọc, nhưng hiển thị dưới dạng phông chữ mặc định. Nó chỉ là khi tôi chạy ứng dụng của tôi mà tùy chỉnh chương trình font face của tôi lên, và nó không phải là trung tâm theo chiều dọc
Pete

bạn có đặt "phông chữ tùy chỉnh" của mình trong IB không? nó có được hỗ trợ trong phông chữ iOS không?
Srikar Appalaraju,

Phông chữ được đặt bằng IB, và cũng bằng mã được chỉ định trong bài đăng gốc của tôi. Nó không thực sự xuất hiện trong mô hình màn hình IB, mặc dù nó có trong trình đơn thả xuống chọn phông chữ trong IB.
Pete

2

Đến bữa tiệc muộn, nhưng vì vấn đề này xảy ra với tôi lần thứ N, tôi nghĩ rằng tôi sẽ đăng giải pháp đơn giản nhất mà tôi tìm thấy: sử dụng Python FontTools .

  1. Cài đặt Python 3 nếu nó không có sẵn trên hệ thống của bạn.

  2. Cài đặt FontTools

    pip3 install fonttools

    FontTools bao gồm một công cụ TTX cho phép chuyển đổi sang và từ XML.

  3. Chuyển đổi phông chữ của bạn thành .ttx trong cùng một thư mục

    ttx myFontFile.otf

  4. Thực hiện các chỉnh sửa cần thiết đối với .ttx và xóa tệp .otf vì tệp này sẽ được thay thế trong bước tiếp theo.

  5. Chuyển đổi tệp trở lại .otf

    ttx myFontFile.ttx


Động lực: Các giải pháp bởi kolyuchi không đầy đủ, và ngay cả với dòng chảy cài đặt mở rộng này , chạy ftxdumperfuserdẫn đến lỗi trên 10.15.2 Catalina.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.