Saat ini saya punya UILabel
:
factLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 280, 100)];
factLabel.text = @"some text some text some text some text";
factLabel.backgroundColor = [UIColor clearColor];
factLabel.lineBreakMode = UILineBreakModeWordWrap;
factLabel.numberOfLines = 10;
[self.view addSubview:factLabel];
Sepanjang masa pakai aplikasi iOS saya, factLabel
dapatkan banyak nilai yang berbeda. Beberapa dengan beberapa kalimat, yang lain hanya dengan 5 atau 6 kata.
Bagaimana saya bisa mengatur UILabel
sehingga ukuran font berubah sehingga teks selalu sesuai dengan batas yang saya tentukan?
ios
objective-c
fonts
uilabel
CodeGuy
sumber
sumber
Jawaban:
Garis tunggal:
Kode di atas akan menyesuaikan ukuran font teks Anda ke (misalnya)
8
mencoba menyesuaikan teks Anda di dalam label.numberOfLines = 1
wajib.Beberapa baris:
Karena
numberOfLines > 1
ada metode untuk mengetahui ukuran teks akhir melalui ukuran NSStringWithFont: ... Metode penambahan UIKit , misalnya:Setelah itu Anda dapat mengubah ukuran label menggunakan hasil
lLabelSize
, misalnya (dengan asumsi Anda hanya akan mengubah tinggi label):iOS6
Garis tunggal:
Dimulai dengan iOS6,
minimumFontSize
telah ditinggalkan. Garisdapat diubah menjadi:
IOS 7
Beberapa baris:
Mulai dengan iOS7,
sizeWithFont
menjadi usang. Kasing multiline dikurangi menjadi:iOS 13 (Swift 5):
sumber
sizeWithFont:constrainedToSize:lineBreakMode:
Tapi cara ini agak sulitmyLabel.minimumScaleFactor:10.0/[UIFont labelFontSize];
minimumFontSize
telah ditinggalkan dengan iOS 6. Anda dapat menggunakanminimumScaleFactor
.Ini akan menangani ukuran font Anda sesuai lebar label dan teks.
sumber
adjustsFontSizeToFitWidth
hanya mengurangi teks jika tidak muat di dalam wadahBerdasarkan jawaban @Eyal Ben Dov Anda mungkin ingin membuat kategori agar fleksibel untuk digunakan dalam aplikasi Anda yang lain.
Obs .: Saya sudah memperbarui kodenya agar kompatibel dengan iOS 7
File -Header
File -Implementation
-Pemakaian
Bersulang
sumber
setNeedsLayout
/layoutIfNeeded
jika Anda menggunakan AutoLayout).Baris tunggal - Ada dua cara, Anda bisa mengubahnya.
1- Secara pragmatis (Cepat 3)
Cukup tambahkan kode berikut
2 - Menggunakan inspektur Atribut UILabel
sumber
Ini tahun 2015. Saya harus pergi untuk menemukan posting blog yang akan menjelaskan bagaimana melakukannya untuk versi terbaru iOS dan XCode dengan Swift sehingga dapat bekerja dengan beberapa baris.
Sumber: http://beckyhansmeyer.com/2015/04/09/autoshrinking-text-in-a-multiline-uilabel/
sumber
Versi cepat:
sumber
Ini ekstensi Swift untuk UILabel. Ini menjalankan algoritma pencarian biner untuk mengubah ukuran font berdasarkan lebar dan tinggi batas label. Diuji untuk bekerja dengan iOS 9 dan pembayaran otomatis.
PENGGUNAAN: Di mana
<label>
UILabel Anda yang telah ditentukan sebelumnya perlu diubah ukuran fontnyaSecara default, fungsi ini mencari dalam kisaran ukuran font 5pt dan 300pt dan mengatur font agar sesuai dengan teksnya "dengan sempurna" dalam batas (akurat dalam 1.0pt). Anda dapat menetapkan parameter sehingga, misalnya, mencari antara 1pt dan ukuran font label saat ini secara akurat dalam 0,1 poin dengan cara berikut:
Salin / Tempel kode berikut ke dalam file Anda
CATATAN: Setiap
layoutIfNeeded()
panggilan dapat dihapus atas kebijakan Anda sendirisumber
Agak sedikit tidak canggih tetapi ini harus bekerja, misalnya katakanlah Anda ingin membatasi uilabel Anda ke 120x120, dengan ukuran font maksimal 28:
sumber
Cukup kirim pesan sizeToFit ke UITextView. Ini akan menyesuaikan ketinggiannya sendiri agar pas dengan teksnya. Itu tidak akan mengubah lebar atau asal sendiri.
sumber
sizeToFit
AndatextViewA1
menjadi 200 poin yang akhirnya dipotong.Versi Swift 2.0:
sumber
Solusi ini berfungsi untuk multiline:
Setelah mengikuti beberapa artikel, dan membutuhkan fungsi yang secara otomatis akan menskala teks dan menyesuaikan jumlah baris agar sesuai dengan ukuran label yang diberikan, saya menulis sendiri fungsi. (mis. string pendek akan cocok dengan baik pada satu garis dan menggunakan sejumlah besar bingkai label, sedangkan kuat panjang akan secara otomatis terpecah menjadi 2 atau 3 garis dan menyesuaikan ukurannya)
Jangan ragu untuk menggunakannya kembali dan mengubah sesuai kebutuhan. Pastikan Anda memanggilnya setelah
viewDidLayoutSubviews
selesai sehingga bingkai label awal telah ditetapkan.sumber
Berikut adalah kode isian dari subkelas UILabel yang mengimplementasikan perubahan ukuran font animasi:
sumber