2009-09-06 29 views
6

Hãy tưởng tượng UILabel, rộng 200 pixel và cao 50 pixel. Nhãn có văn bản bên trong và nhãn làm cho văn bản nhỏ hơn sao cho nó vừa với nhãn. Nhưng bây giờ, làm thế nào bạn sẽ nhận được kích thước của UIFont như thế nào nó có thể nhìn thấy trong nhãn? Hãy tưởng tượng kích thước phông chữ đã được đưa ra với rất lớn 100, và nhãn ép nó xuống 15. Và sau đó, bạn muốn làm cho một số nhãn khác với văn bản nhỏ, trong đó có cùng một kích thước phông chữ. Có cách nào để có được kích thước phông chữ của UIFont sau khi bị ép bởi nhãn không?Cách tính kích thước của một UIFont khi văn bản trong nhãn bị hạn chế để vừa với chiều rộng?

Trả lời

15

Nếu bạn vượt qua kích thước của UILabel và breakMode, vv để:

CGSize size = [label.text sizeWithFont:label.font minFontSize:10 actualFontSize:&actualFontSize forWidth:200 lineBreakMode:UILineBreakModeTailTruncation]; 

actualFontSize nên được những gì bạn đang tìm kiếm.

CẬP NHẬT:

Ở trên đã không được chấp nhận. Phương pháp sử dụng bây giờ là:

- (CGRect)textRectForBounds:(CGRect)bounds 
    limitedToNumberOfLines:(NSInteger)numberOfLines 

Dưới đây là một ví dụ

CGSize size = [label textRectForBounds:label.bounds 
    limitedToNumberOfLines:1].size; 
+0

Vì vậy actualFontSize sẽ là một CGSize mà tôi đi qua tham chiếu đến phương pháp đó? –

+0

Có. Trong C và Obj C, một hàm bị hạn chế trong cách nó có thể trả về các giá trị. Các đối số bạn chuyển đến một hàm được đánh giá và giá trị của chúng được đẩy lên ngăn xếp, trước khi hàm được gọi. Hàm chỉ nhận các giá trị đó và không thể chuyển tiếp một giá trị trả về trong chúng. Trừ khi những gì được đẩy là một con trỏ, trong trường hợp đó hàm có thể sử dụng con trỏ để ghi vào địa chỉ của nó và sửa đổi nó. Tôi đang oversimplifying - ở đây actualFontSize là một trong những giá trị trả về của hàm (method). – mahboudz

+0

Điều này không được chấp nhận trong iOS7. Có thay thế cho iOS8 không? –

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