Bagaimana cara kerja minimumScaleFactor dari UILabel?

109

Saya telah menggunakan minimumFontSizesebelumnya tetapi fungsi itu sekarang sudah usang dan saya tidak begitu mengerti cara minimumScaleFactorkerjanya.

Saya ingin ukuran font maksimal 10 dan minimal 7.

Bagaimana saya bisa mengubah ukuran ke ukuran font 7 dengan faktor skala?

UILabel penciptaan:

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

Jawaban:

204

Anda perlu menyetel label.adjustsFontSizeToFitWidth = YES;

Scott
sumber
1
Sempurna, inilah yang saya lewatkan dalam kode saya sendiri. Terima kasih: D
Fogmeister
14
Catatan: "Dokumentasi Apple mengatakan minimumScaleFactor hanya berfungsi jika numberOfLines disetel ke 1. Menggunakan 0 atau lebih besar dari 1 tidak akan berfungsi." . Terima kasih SeanK.
samthui7
Hebat! Lucu bahwa jika Anda menyetel minumumScaleFactor di XIB, Anda tidak perlu menyetel adjustsFontSizeToFitWidth, tetapi Anda perlu saat melakukannya di kode.
Politta
104

Sebagai tambahan dari jawaban lain, jika Anda meletakkan minSize / defaultSize (divisi) sebagai minimumScaleFactor, itu akan sama dengan menggunakan yang lama minimumFontSize.

Mis, jika Anda ingin ukuran font minimum menjadi 10 menggunakan ukuran label default, Anda dapat melakukan:

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

(Ganti [UIFont labelFontSize]dengan ukuran font label Anda jika itu bukan default).

yang akan sama dengan: [label setMinimumFontSize:10.0];

Jsdodgers
sumber
divisi harus dicor sebagai CGFloat, jika tidak maka tidak akan berhasil
dwery
@dwery Melakukan 10 / labelSize mungkin berakhir dengan nilai integer terpotong 0 tapi 10.0 atau 10.f berfungsi dengan baik, tanpa casting eksplisit.
Kalle
Anda benar, itu harus berhasil. Saya tidak dapat mengingat kode mana yang tidak berhasil untuk saya, mungkin tidak ada f atau titiknya.
dwery
20

Menurut dokumentasi :

Gunakan properti ini untuk menentukan pengali terkecil untuk ukuran font saat ini yang menghasilkan ukuran font yang dapat diterima untuk digunakan saat menampilkan teks label. Jika Anda menentukan nilai 0 untuk properti ini, ukuran font saat ini digunakan sebagai ukuran font terkecil.

Jadi jika ukuran font default untuk label Anda adalah 10, Anda menempatkan 0.7fsebagai minimumScaleFactordan itu harus melakukan hal yang sama seperti minimumFontSizesebelumnya.

kovpas.dll
sumber
Itulah yang juga saya pikirkan; tetapi bahkan ketika saya meletakkannya sebagai 0.1f, teks tidak menyesuaikan ukuran. saya akan menambahkan kode uilabel.
Padin215
Bagaimana jika Anda menghilangkan batasan dan hanya mengecilkan bingkai label?
kovpas
9
Log139: Di mana numberOfLines Anda disetel? Dokumentasi Apple mengatakan minimumScaleFactor hanya berfungsi jika numberOfLines diatur ke 1. Menggunakan 0 atau lebih besar dari 1 tidak akan berfungsi.
SeanK
1
@SeanK Ini akan bekerja bahkan jika numberOfLines diatur ke lebih dari 1 tetapi BUKAN 0.
Asadullah Ali
12

Selain jawaban lain, saya akan menambahkan penjelasan ramah-pemula yang membantu diri saya sendiri:

Bagaimana cara menghitung a minimumScaleFactor ? Bagilah ukuran font minimum label Anda dengan ukuran font default label Anda. Misalnya, ukuran font default Anda adalah 25. Ukuran font minimum Anda adalah 10.

10/25 = 0,4

0,4 adalah minimumScaleFactornilai Anda . Lihat juga jawaban @ Jsdodgers di atas.

AVog
sumber