Saya mengalami kesulitan mencoba mencapai beberapa perilaku tata letak yang sangat mendasar dengan Auto Layout. Pengontrol tampilan saya terlihat seperti ini di IB:
Label teratas adalah label judul, saya tidak tahu berapa banyak garis itu. Saya perlu label judul untuk menampilkan semua baris teks. Saya juga membutuhkan dua label lainnya dan gambar kecil untuk diletakkan tepat di bawah judul, betapapun tingginya. Saya telah menetapkan batasan jarak vertikal antara label dan gambar kecil, serta batasan jarak atas antara label judul dan superview dan batasan spasi bawah antara gambar kecil dan superview-nya. UIView putih tidak memiliki batasan ketinggian, sehingga harus meregang secara vertikal untuk memuat subview-nya. Saya telah menetapkan jumlah baris untuk label judul menjadi 0.
Bagaimana saya bisa mendapatkan label ukuran untuk menyesuaikan agar sesuai dengan jumlah baris yang dibutuhkan oleh string? Pemahaman saya adalah bahwa saya tidak dapat menggunakan metode setFrame karena saya menggunakan Tata Letak Otomatis. Dan saya harus menggunakan Tata Letak Otomatis karena saya membutuhkan pandangan lain untuk tetap di bawah label judul (karenanya kendala).
Bagaimana saya bisa mewujudkannya?
sumber
Jawaban:
Gunakan
-setPreferredMaxLayoutWidth
padaUILabel
dan autolayout harus menangani sisanya.Lihat dokumentasi UILabel di preferMaxLayoutWidth .
Memperbarui:
Hanya perlu mengatur
height
kendala di storyboardGreater than or equal to
, tidak perlu setPreferredMaxLayoutWidth.sumber
preferredMaxLayoutWidth
dan melihat devetc.org/code/2014/07/07/auto-layout-and-views-that-wrap.html untuk penulisan singkat namun informatif, lengkap dengan animasi GIF (bukan tulisan saya, saya menemukannya melalui Google)Luaskan label set jumlah garis Anda ke 0 dan juga yang lebih penting untuk tata letak otomatis atur tinggi ke> = x. Tata letak otomatis akan melakukan sisanya. Anda juga dapat memuat elemen lain berdasarkan elemen sebelumnya untuk memposisikannya dengan benar.
sumber
Sumber: http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html
Ukuran Konten Intrinsik dari Teks Multi-Baris
Ukuran konten intrinsik dari UILabel dan NSTextField ambigu untuk teks multi-baris. Ketinggian teks tergantung pada lebar garis, yang belum ditentukan saat menyelesaikan kendala. Untuk mengatasi masalah ini, kedua kelas memiliki properti baru yang disebut preferMaxLayoutWidth, yang menentukan lebar garis maksimum untuk menghitung ukuran konten intrinsik.
Karena kita biasanya tidak mengetahui nilai ini sebelumnya, kita perlu mengambil pendekatan dua langkah untuk mendapatkan ini dengan benar. Pertama kita membiarkan Tata Letak Otomatis melakukan tugasnya, dan kemudian kita menggunakan bingkai yang dihasilkan dalam tata letak lulus untuk memperbarui lebar maksimum yang diinginkan dan memicu tata letak lagi.
Panggilan pertama ke [super layoutSubviews] diperlukan untuk label untuk mengatur frame-nya, sementara panggilan kedua diperlukan untuk memperbarui tata letak setelah perubahan. Jika kami mengabaikan panggilan kedua, kami mendapatkan kesalahan NSInternalInconsistencyException, karena kami telah membuat perubahan dalam tata letak pass yang membutuhkan pembaruan kendala, tetapi kami tidak memicu tata letak lagi.
Kita juga bisa melakukan ini di label subclass itu sendiri:
Dalam hal ini, kita tidak perlu memanggil [super layoutSubviews] terlebih dahulu, karena ketika layoutSubviews dipanggil, kita sudah memiliki bingkai pada label itu sendiri.
Untuk melakukan penyesuaian ini dari level controller tampilan, kami menghubungkan ke viewDidLayoutSubviews. Pada titik ini frame dari lintasan Tata Letak Otomatis pertama telah ditetapkan dan kita dapat menggunakannya untuk mengatur lebar maksimum yang diinginkan.
Terakhir, pastikan Anda tidak memiliki batasan ketinggian eksplisit pada label yang memiliki prioritas lebih tinggi daripada prioritas resistensi kompresi konten label. Kalau tidak, itu akan mengalahkan tinggi konten yang dihitung. Pastikan untuk memeriksa semua kendala yang dapat memengaruhi ketinggian label.
sumber
Saya hanya bertarung dengan skenario yang tepat ini, tetapi dengan beberapa pandangan lagi yang perlu diubah ukurannya dan bergerak ke bawah sesuai kebutuhan. Itu membuatku gila, tapi aku akhirnya menemukan jawabannya.
Inilah kuncinya: Pembuat Antarmuka suka melempar kendala tambahan saat Anda menambah dan memindahkan tampilan dan Anda mungkin tidak menyadarinya. Dalam kasus saya, saya memiliki pandangan setengah jalan yang memiliki batasan tambahan yang menentukan ukuran antara itu dan superview, pada dasarnya menyematkannya ke titik itu. Itu berarti bahwa tidak ada ukuran di atasnya yang dapat mengubah ukuran lebih besar karena akan bertentangan dengan batasan itu.
Cara mudah untuk mengetahui apakah ini masalahnya adalah dengan mencoba mengubah ukuran label secara manual. Apakah IB membiarkan Anda menanamnya? Jika ya, apakah label di bawah ini bergerak seperti yang Anda harapkan? Pastikan Anda telah memeriksa keduanya sebelum mengubah ukuran untuk melihat bagaimana kendala Anda akan menggerakkan pandangan Anda:
Jika tampilan macet, ikuti pandangan di bawahnya dan pastikan salah satu dari mereka tidak memiliki ruang atas untuk batasan superview. Kemudian pastikan jumlah opsi baris Anda untuk label diatur ke 0 dan harus mengurus sisanya.
sumber
Saya menemukan Anda membutuhkan yang berikut:
sumber
Tidak ada solusi berbeda yang ditemukan dalam banyak topik pada subjek yang bekerja dengan baik untuk kasus saya (x label multiline dinamis dalam sel tampilan tabel dinamis).
Saya menemukan cara untuk melakukannya:
Setelah menetapkan batasan pada label Anda dan mengatur properti multiline ke 0, buat subkelas dari UILabel; Saya menelepon milikku AutoLayoutLabel:
sumber
Saya memiliki UITableViewCell yang memiliki label bungkus teks. Saya mengerjakan pembungkus teks sebagai berikut.
1) Tetapkan batasan UILabel sebagai berikut.
2) Atur no. dari garis ke 0.
3) Menambahkan batasan ketinggian UILabel ke UITableViewCell.
4) Pada UITableViewCell:
sumber
Salah satu cara untuk melakukan ini ... Ketika panjang teks bertambah, cobalah untuk mengubah (mengurangi) ukuran font dari teks label yang digunakan
sumber