UILabel'in minimumScaleFactor'ı nasıl çalışır?


109

Daha minimumFontSizeönce kullandım ancak bu işlev artık kullanımdan kaldırıldı ve nasıl minimumScaleFactorçalıştığını tam olarak anlamıyorum .

Maksimum yazı tipi boyutunun 10 ve minimumun 7 olmasını istiyorum.

Ölçek faktörü ile yazı tipi boyutu 7'ye nasıl yeniden boyutlandırabilirim?

UILabel oluşturma:

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];

Yanıtlar:


204

Ayarlamanız gerekiyor label.adjustsFontSizeToFitWidth = YES;


1
Mükemmel, kendi kodumda eksik olan şey buydu. Teşekkürler: D
Fogmeister

14
Not: "Apple'ın belgeleri, minimumScaleFactor'ın yalnızca numberOfLines 1'e ayarlandığında çalıştığını söylüyor. 0 veya 1'den büyük herhangi bir şeyin kullanılması işe yaramayacaktır." . SeanK teşekkürler.
samthui7

Harika! MinumumScaleFactor'ı XIB'de ayarlarsanız, AdjustsFontSizeToFitWidth'i ayarlamanıza gerek kalmaması, ancak kodu yaparken ihtiyacınız olması ilginçtir.
Politta 09

104

Diğer cevapların söylediklerine ek olarak, minSize / defaultSize (division) 'ı olarak koyarsanız minimumScaleFactor, eskisini kullanmakla aynı olacaktır minimumFontSize.

Örneğin, varsayılan etiket boyutunu kullanarak minimum yazı tipi boyutunun 10 olmasını istiyorsanız şunları yapabilirsiniz:

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

( [UIFont labelFontSize]Varsayılan değilse, etiketinizin yazı tipi boyutuyla değiştirin ).

şununla aynı olacaktır: [label setMinimumFontSize:10.0];


bölüm CGFloat olarak kullanılmalı, aksi takdirde işe yaramaz
dwery

@dwery 10 / labelSize işlemi, kesilmiş bir tamsayı değeri 0 ile sonuçlanabilir ancak 10.0 veya 10.f, açıkça çevrim yapmadan iyi çalışır.
Kalle

haklısın, çalışmalı. Benim için hangi kodda çalışmadığını hatırlayamıyorum, muhtemelen f veya noktası eksikti.
dwery

20

Belgelere göre :

Etiketin metnini görüntülerken kullanmak üzere kabul edilebilir bir yazı tipi boyutu sağlayan geçerli yazı tipi boyutu için en küçük çarpanı belirtmek için bu özelliği kullanın. Bu özellik için 0 değerini belirtirseniz, mevcut yazı tipi boyutu en küçük yazı tipi boyutu olarak kullanılır.

Dolayısıyla, etiketiniz için varsayılan yazı tipi boyutu ise 10, 0.7fbir olarak koyun minimumScaleFactorve yaptığınızla aynı şeyi yapmalıdır minimumFontSize.


Ben de öyle düşündüm; ancak 0.1f olarak koysam bile metin boyutu ayarlamıyor. uilabel kodunu ekleyeceğim.
Padin215

Ya kısıtlamaları kaldırır ve sadece etiketin çerçevesini küçültürseniz?
kovpas

9
Log139: numberOfLines ayarınız neye ayarlandı? Apple'ın belgeleri, minimumScaleFactor'ın yalnızca numberOfLines değeri 1'e ayarlandığında çalıştığını söylüyor. 0 veya 1'den büyük herhangi bir şeyin kullanılması işe yaramayacaktır.
SeanK

1
@SeanK numberOfLines 1'den büyük ama 0 DEĞİL olarak ayarlanmış olsa bile çalışacaktır.
Asadullah Ali

12

Diğer yanıtlara ek olarak, kendime yardımcı olan başlangıç ​​dostu bir açıklama ekleyeceğim:

A nasıl hesaplanır minimumScaleFactor? Etiketinizin minimum yazı tipi boyutunu, etiketinizin varsayılan yazı tipi boyutuna bölün. Örneğin, varsayılan yazı tipi boyutunuz 25'tir. Minimum yazı tipi boyutunuz 10'dur.

10/25 = 0.4

0.4 sizin minimumScaleFactordeğerinizdir. Ayrıca @ Jsdodgers'ın yukarıdaki cevabına bakın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.