2011-01-01 40 views
31

Tôi có một UIButton được xây dựng trong giao diện Builder có một nhãn mặc định. Trong Xcode, tôi thay đổi nội dung nhãn tự động như sau:Văn bản nhãn UIButton đang được cắt bớt

myButton.titleLabel.text = @"this is the new label"; 

Tuy nhiên, khi các bản cập nhật văn bản, chuỗi mới đã được cắt bớt xuống đến kích thước tương tự như chuỗi ban đầu và kết thúc lên trông như:

this...label 

Bất kỳ ai biết tại sao điều này xảy ra?

Trả lời

56

Bạn nên sử dụng setTitle:forState: để thay đổi tiêu đề của UIButton. Nếu bạn thay đổi tiêu đề cho mình, nút không có dấu hiệu cho thấy nó cần phải thay đổi kích thước nhãn - bạn muốn kết thúc phải làm một cái gì đó như thế này:

myButton.titleLabel.text = @"this is the new label"; 
[myButton setNeedsLayout]; 

nhưng tôi thậm chí không chắc chắn rằng sẽ làm việc trong Mọi trường hợp. Các phương thức như setTitle:forState: được cung cấp để bạn có thể cung cấp tiêu đề cho nhiều tiểu bang mà không phải cập nhật nút theo cách thủ công và do đó nút biết rằng cần phải đặt tiêu đề mới với tiêu đề mới.

+1

Chắc chắn rồi. Cách thích hợp để có được văn bản nút động để thay đổi kích thước titleLabel của nút là thông qua setTitle: forState: –

5

Gọi sizeToFit trên nút của bạn. Điều này sẽ thay đổi kích thước nút để phù hợp với văn bản.

1

Nếu điều đó không hoạt động, bạn luôn có thể xác định kích thước chuỗi và điều chỉnh độ rộng khung của nút. Trong trường hợp đó bạn chắc chắn nó sẽ phù hợp.

// Calculate the size 
CGSize buttonSize = [@"My text.." sizeWithFont:[UIFont systemFontOfSize:15.0] 
        constrainedToSize:someSize lineBreakMode:UILineBreakModeWordWrap]; 

// Do whatever you want with the "buttonSize", you can for example adjust your button's frame width 
18

Một giải pháp thay thế là để cho UILabel bên trong của UIButton để thu nhỏ kích thước font chữ, như UILabels có thể làm:

button.titlelabel.minimumFontSize = 8.0; // or some more adequate size 
self.buttonWithLongTitle.titleLabel.adjustsFontSizeToFitWidth = YES; 
+0

đó là điều duy nhất làm việc cho tôi ... nút không kéo dài nhưng ít nhất bạn có thể xem văn bản –

+4

Lưu ý: 'minimumFontSize' hiện không được dùng nữa. Sử dụng 'minimumScaleFactor' để thay thế. I E. để hoàn toàn dừng downscaling, sử dụng 'minimumScaleFactor = 1.0;' –

+0

Đây là câu trả lời đúng, cụ thể adjustsFontSizeToFitWidth là phương thức mà OP đang tìm kiếm. – Dado

22

Hãy thử sử dụng phương pháp setTitle của nút (chứ không phải thiết lập các tiêu đề trực tiếp trên nhãn). Nó sẽ buộc nhãn tiêu đề được thay đổi kích cỡ.

C Mục tiêu:

[myButton setTitle:@"This is the text" forState:UIControlStateNormal]; 

Hoặc trong Swift:

myButton.setTitle("This is the text", for: .normal) 
+0

+1 cho câu trả lời hoàn hảo. Tôi đã thử tất cả hai lựa chọn thay thế ở trên. Nhưng không thể giải quyết được vấn đề của tôi ngoại trừ câu trả lời này. –

+0

thay vì câu trả lời được chọn tốt nhất, câu trả lời này hoàn toàn phù hợp với tôi! +1 –

+0

Đồng ý. Điều này nên được chấp nhận :) +1 –

Các vấn đề liên quan