Tối thiểu của UILabel's MinimumFactor hoạt động như thế nào?


109

Tôi đã sử dụng minimumFontSizetrước đây nhưng chức năng đó hiện không được dùng nữa và tôi không hiểu rõ về cách minimumScaleFactorhoạt động.

Tôi muốn kích thước phông chữ tối đa là 10 và tối thiểu là 7.

Làm cách nào để tôi có thể giảm kích thước lại thành cỡ chữ 7 với hệ số tỷ lệ?

UILabel sự sáng tạo:

UILabel *label = [[UILabel alloc] init];
[label setTranslatesAutoresizingMaskIntoConstraints:NO];
label.text =  [labelName uppercaseString];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor whiteColor];
label.font = [UIFont fontWithName:HELVETICA_FONT_STYLE_BOLD size:9.5];
label.backgroundColor = [UIColor clearColor];
label.minimumScaleFactor = .1f;

[label addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[label(WIDTH)]"
                                                              options:0
                                                              metrics:@{@"WIDTH" : [NSNumber numberWithFloat:buttonSize.width]}
                                                                views:NSDictionaryOfVariableBindings(label)]];

[contentView addSubview:label];

Câu trả lời:


204

Bạn cần đặt label.adjustsFontSizeToFitWidth = YES;


1
Hoàn hảo, đây là những gì tôi đã thiếu trong mã của riêng tôi. Cảm ơn: D
Fogmeister.

14
Lưu ý: "Tài liệu của Apple nói rằng MinimumScaleFactor chỉ hoạt động nếu numberOfLines được đặt thành 1. Sử dụng 0 hoặc bất kỳ thứ gì lớn hơn 1 sẽ không hoạt động." . Cảm ơn SeanK.
samthui7

Tuyệt vời! Thật buồn cười là nếu bạn đặt minumumScaleFactor trong XIB, bạn không cần đặt AdjustsFontSizeToFitWidth, nhưng bạn cần khi thực hiện trong mã.
Politta

104

Ngoài những gì các câu trả lời khác nói, nếu bạn đặt minSize / defaultSize (phân chia) minimumScaleFactor, nó sẽ giống như sử dụng câu trả lời cũ minimumFontSize.

Ví dụ: nếu bạn muốn kích thước phông chữ tối thiểu là 10 bằng cách sử dụng kích thước nhãn mặc định, bạn có thể thực hiện:

[label setMinimumScaleFactor:10.0/[UIFont labelFontSize]];

(Thay thế [UIFont labelFontSize]bằng kích thước phông chữ của nhãn nếu nó không phải là kích thước mặc định).

sẽ giống như: [label setMinimumFontSize:10.0];


bộ phận nên được chọn vào vai CGFloat, nếu không nó sẽ không hoạt động
dwery

@dwery doing 10 / labelSize có thể kết thúc bằng giá trị số nguyên bị cắt ngắn là 0 nhưng 10.0 hoặc 10.f hoạt động tốt mà không cần ép kiểu rõ ràng.
Kalle

bạn nói đúng, nó sẽ hoạt động. Tôi không thể nhớ mã nào nó không hoạt động với tôi, có lẽ nó bị thiếu f hoặc dấu chấm.
dwery

20

Theo tài liệu :

Sử dụng thuộc tính này để chỉ định hệ số nhỏ nhất cho kích thước phông chữ hiện tại mang lại kích thước phông chữ chấp nhận được để sử dụng khi hiển thị văn bản của nhãn. Nếu bạn chỉ định giá trị 0 cho thuộc tính này, thì kích thước phông chữ hiện tại được sử dụng làm kích thước phông chữ nhỏ nhất.

Vì vậy, nếu kích thước phông chữ mặc định cho nhãn của bạn là 10, bạn đặt 0.7flà một minimumScaleFactorvà nó sẽ làm điều tương tự như minimumFontSizeđã làm.


Đó là những gì tôi cũng nghĩ; nhưng ngay cả khi tôi đặt nó là 0,1f, văn bản không điều chỉnh kích thước. tôi sẽ thêm mã uilabel.
Padin215

Điều gì sẽ xảy ra nếu bạn loại bỏ các ràng buộc và chỉ thu nhỏ khung của nhãn?
kovpas

9
Log139: NumberOfLines của bạn được đặt thành bao nhiêu? Tài liệu của Apple nói rằng MinimumScaleFactor chỉ hoạt động nếu numberOfLines được đặt thành 1. Sử dụng 0 hoặc bất kỳ thứ gì lớn hơn 1 sẽ không hoạt động.
SeanK

1
@SeanK Nó sẽ làm việc ngay cả khi numberOfLines được thiết lập để hơn 1 nhưng KHÔNG 0.
Asadullah Ali

12

Ngoài các câu trả lời khác, tôi sẽ thêm một lời giải thích thân thiện với người mới bắt đầu đã giúp bản thân tôi:

Cách tính a minimumScaleFactor? Chia kích thước phông chữ tối thiểu của nhãn cho kích thước phông chữ mặc định của nhãn. Ví dụ: kích thước phông chữ mặc định của bạn là 25. Kích thước phông chữ tối thiểu của bạn là 10.

10/25 = 0,4

0,4 là minimumScaleFactorgiá trị của bạn . Cũng xem câu trả lời của @ Jsdodgers ở trên.

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.