2012-04-17 32 views
5

Tôi đang sử dụng phông chữ tùy chỉnh cho tiêu đề của UIButton. Nó hoạt động, ngoại trừ với phông chữ đặc biệt này một phần của ký tự đầu tiên được cắt bớt. Ví dụ:Cắt tiêu đề UIButton

enter image description here

tôi đã cố gắng thiết lập các contentEdgeInsets và titleEdgeInsets và dường như không thể có được nó không phải cắt bớt. Tôi cũng đã thử đặt thuộc tính button.titleLabel.clipsToBounds thành NO;

Mọi đề xuất sẽ được đánh giá rất nhiều.

Trả lời

8

Vì vậy, tôi vừa kết thúc thiết lập tiêu đề UIButton thành nil và thêm UILabel của riêng tôi làm tiểu sử cho UIButton. Tôi đặt khung UILabel thành cùng kích thước với nút và đặt nó thành tâm.

Không phải là giải pháp thanh lịch nhất mà tôi chắc chắn, nhưng nó hoàn thành công việc.

+2

Nó thực sự sucks rằng đây là giải pháp duy nhất. Lý do điều này xảy ra là các nhà thiết kế phông chữ cố ý mã hóa các giới hạn của các chữ cái của họ ít hơn so với thực tế là chúng sẽ làm tổ. Điều này đặc biệt quan trọng đối với phông chữ nghiêng và chữ thảo. Tôi muốn Apple sẽ không được "chính xác" như vậy với việc tính toán chiều rộng của nhãn UIButton, hoặc ít nhất là cho phép chúng ta tự thay đổi nó. Tôi đang gửi báo cáo lỗi, bạn cũng nên làm như vậy. – Bek

1

Dường như với tôi nội dung của bạn được căn chỉnh một cách vui nhộn. Nếu không thể truy cập trực tiếp vào khung của nhãn, hãy sử dụng [button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter]; để cố khắc phục sự cố căn chỉnh ngang.

+0

Trên thực tế nó được thiết lập để trung tâm như vậy. Nếu tôi đặt nó thành đúng đắn thì nó vẫn bị cắt. –

9

Mặc dù giải pháp của Jeshua hoạt động tốt, nhưng nó không phải là tối ưu trong mắt tôi. Tôi muốn giới thiệu cho UIButton lớp con và ghi đè lên phương thức layoutSubviews.

-(void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    CGRect frame = self.titleLabel.frame; 
    frame.size.height = self.bounds.size.height; 
    frame.origin.y = self.titleEdgeInsets.top; 
    self.titleLabel.frame = frame; 
} 
+0

Điều này thực sự dễ thực hiện, chỉ cần tạo một lớp (lớp con UIButton), sao chép dán, gán cho lớp tùy chỉnh của nút. Cảm ơn! –

+0

Đây phải là câu trả lời được chấp nhận. Đơn giản và thanh lịch. –

+0

hoàn hảo Cảm ơn bạn –

0

đang Swift cho câu trả lời ở trên:

override func layoutSubviews() { 
    super.layoutSubviews() 
    titleLabel?.frame = CGRect(x: bounds.origin.x, y: titleEdgeInsets.top, width: frame.width, height: bounds.size.height) 
} 
Các vấn đề liên quan