Saya memiliki masalah aneh ini, dan saya mengatasinya selama lebih dari 8 jam sekarang .. Bergantung pada situasi saya harus menghitung UILabels
ukuran secara dinamis,
misalnya
saya UIViewController
menerima sebuah acara dan saya mengubah UILabels
ukuran. dari yang lebih besar ke yang lebih kecil. Ukuran saya UILabel
menjadi lebih kecil dan saya mendapatkan ukuran yang dibutuhkan yang benar, tetapi teks dalam saya UILabel
tetap sama, ukuran font yang sama dan lain-lain. Saya membutuhkan font untuk menjadi lebih kecil, agar seluruh teks sesuai UILabel
. Jadi pertanyaannya adalah bagaimana membuat teks agar sesuai dengan label saya autoshrinking
atau sesuatu seperti itu?
Di saya xib
, UILabels
autoshrink
dicentang, juga jumlah baris diatur ke 0, dan juga string saya memiliki simbol baris baru (\ n), dan saya telah memilih linebreakmode ke wordwrap
. Mungkin ada orang yang berada dalam situasi yang sama seperti saya sekarang, dan dapat membantu saya? Saya akan sangat menghargai itu.
Terima kasih sebelumnya!
EDIT: UILabel
ukuran font minimum diatur ke 10
sumber
Jawaban:
Jika Anda masih mencari solusi yang lebih baik, saya pikir inilah yang Anda inginkan:
Nilai Boolean yang menunjukkan apakah ukuran font harus diperkecil agar sesuai dengan string judul ke dalam persegi panjang pembatas label (properti ini hanya efektif jika
numberOfLines
properti disetel ke 1).Saat menyetel properti ini,
minimumScaleFactor
HARUS disetel juga (default yang baik adalah 0,5).Cepat
Objective-C
Nilai Boolean yang menunjukkan apakah spasi antar huruf harus disesuaikan agar pas dengan string di dalam persegi panjang batas label.
Cepat
Objective-C
Sumber .
sumber
minimumFontSize
tidak digunakan lagi di iOS 6.0. GunakanminimumScaleFactor
sebagai gantinya.Ini adalah bagaimana saya mendapatkan
Autoshrink
kerja UILabel (terutama untuk ketinggian pemasangan font label di perangkat 4s dari 6s Plus Storyboard) di iOS 9.2, Xcode 7.2 ...sumber
minimumFontSize
tidak digunakan lagi di iOS 6.Jadi gunakan
minimumScaleFactor
sajaminmimumFontSize
.Cepat 5
sumber
juga solusi saya adalah boolean label.adjustsFontSizeToFitWidth = YES; TAPI. Anda harus di Builder antarmuka Word Wrapping beralih ke " CLIP ". Kemudian tautkan otomatis Label. Ini sangat penting.
sumber
Di Swift 3 (Secara terprogram) saya harus melakukan ini:
sumber
Anda bisa menulis seperti
Anda dapat menghitung jumlah baris seperti itu
Semoga ini bisa membantu Anda :-) menunggu balasan Anda
sumber
Nah pada akhirnya saya tidak menemukan jawaban saya. Dan menurut saya autoshrink tidak berfungsi untuk banyak baris. Saya akhirnya menggunakan saran di tautan ini: tautan otomatis pada UILabel dengan banyak baris
Solusinya adalah dengan menghitung tinggi teks pada lebar tertentu dan jika teks lebih besar, mengecilkan ukuran font lalu lakukan hal yang sama lagi hingga tingginya sama atau kurang dari ukuran yang Anda butuhkan.
Saya tidak mengerti mengapa ini harus sangat sulit diterapkan. Jika saya melewatkan sesuatu, semua orang dipersilakan untuk mengoreksi saya :)
sumber
Ini untuk Swift 3 yang menjalankan Xcode 8.2.1 (8C1002)
Solusi terbaik yang saya temukan adalah menyetel lebar tetap di Storyboard atau IB Anda pada label. Tetapkan batasan Anda dengan batasan ke margin. Di viewDidLoad Anda, tambahkan baris kode berikut:
Ini berfungsi seperti pesona dan tidak meluap ke baris baru dan menyusutkan teks agar sesuai dengan lebar label tanpa masalah aneh dan berfungsi di Swift 3.
sumber
Ini pertanyaan yang bagus, karena sepertinya itu akan menjadi bagian dari
UIKit
fungsionalitas bawaan atau kerangka kerja terkait sekarang. Berikut adalah contoh visual yang bagus dari pertanyaan tersebut:Tidak ada cara mudah untuk mengatasinya, tetapi itu pasti mungkin. Salah satu cara untuk melakukannya adalah dengan mencoba berbagai ukuran font secara terprogram hingga Anda menemukan salah satu yang cukup dekat dengan batas tampilan. Anda dapat melakukannya dengan
boundingRect()
fungsiNSString
atauNSAttributedString
. Sebagai contoh:Anda dapat melakukan pencarian biner agar lebih efisien daripada pendekatan brute force lengkap. Ada juga beberapa pertimbangan yang sedikit lebih terlibat, termasuk pembungkusan kata yang benar dan kinerja cache font iOS, jika Anda mencari sesuatu yang sangat kuat.
Jika Anda hanya peduli tentang menampilkan teks di layar dengan cara yang mudah, saya telah mengembangkan implementasi yang kuat di Swift, yang juga saya gunakan dalam aplikasi produksi. Ini adalah
UIView
subclass dengan penskalaan font otomatis yang efisien untuk teks input apa pun, termasuk beberapa baris. Untuk menggunakannya, Anda cukup melakukan sesuatu seperti:Itu dia! Anda dapat menemukan sumber lengkapnya di sini: https://github.com/FlickType/AccessibilityKit
Semoga ini membantu!
sumber
Di iOS 9 saya hanya perlu:
Seseorang merekomendasikan pengaturan jumlah baris menjadi 0, tetapi bagi saya ini hanya membuat label menjadi beberapa baris ...
sumber
UILabel
dan aUITextField
dalam sel statis dan mengklik "Selesaikan Masalah Tata Letak Otomatis", dan "Tambahkan Kendala yang Hilang". Semuanya berbaris, tetapi Autoshrink perlu mengetahui jarak ke label, yang "Add Missing Constraints" tidak menambahkan batasan.Saya pikir Anda dapat menulis kode di bawah ini setelah mengalokasikan Label init
Ini bekerja dengan saya baik-baik saja. Gunakan
sumber
Dua tahun berlalu, dan masalah ini masih ada ...
Di iOS 8 / XCode 6.1, saya terkadang menemukan bahwa saya
UILabel
(dibuat di fileUITableViewCell
, dengan AutoLayout dihidupkan, dan batasan fleksibel sehingga memiliki banyak ruang) tidak akan mengubah ukurannya sendiri agar sesuai dengan string teks.Solusinya, seperti tahun-tahun sebelumnya, adalah mengatur teks, dan kemudian menelepon
sizeToFit
.(Mendesah.)
sumber
Begini cara melakukannya Misalkan messageLabel berikut adalah label yang Anda inginkan untuk mendapatkan efek yang diinginkan. Sekarang, coba baris kode sederhana ini:
sumber
tidak bekerja jika
numberOfLines > 1
apa yang saya lakukan membuat kondisi seperti ini-sumber
Datang terlambat ke pesta, tetapi karena saya memiliki persyaratan tambahan untuk memiliki satu kata per baris, penambahan satu ini berhasil untuk saya:
label.numberOfLines = [labelString componentsSeparatedByString:@" "].count;
Apple Docs mengatakan:
Tapi ini bohong. Sebuah kebohongan yang kuberitahukan padamu! Itu benar untuk semua versi iOS. Secara khusus, ini berlaku saat menggunakan a
UILabel
dalamUICollectionViewCell
yang ukurannya ditentukan oleh batasan yang disesuaikan secara dinamis pada waktu proses melalui tata letak khusus (mis.self.menuCollectionViewLayout.itemSize = size
).Jadi, saat digunakan bersama dengan
adjustsFontSizeToFitWidth
danminimumScaleFactor
, seperti yang disebutkan dalam jawaban sebelumnya, pengaturan secara terprogramnumberOfLines
berdasarkan jumlah kata memecahkan masalah tautan otomatis. Melakukan sesuatu yang serupa berdasarkan jumlah kata atau bahkan jumlah karakter mungkin menghasilkan solusi yang "cukup dekat".sumber
Di Swift 4 (Secara terprogram):
sumber
Swift 4, Xcode 9.4.1
Solusi yang berhasil untuk saya: Saya memiliki label dalam sel tampilan koleksi , dan teks label sedang dipangkas. Atur atribut seperti di bawah ini di Papan Cerita
sumber