Setelah memperbarui ke Xcode 6.1 beta 2 ketika saya menjalankan aplikasi saya yang berisi sel tableview, asisten debug mengatakan:
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
Sebelumnya, ketika saya menggunakan Xcode 5 pada proyek ini, saya akan mendapatkan beberapa kesalahan tetapi itu telah hilang sejak saya meningkatkan. Saya tidak memiliki kesalahan atau peringatan lain sekarang. Saya sudah mencoba menyesuaikan ukuran semua sel tableview dan juga mencoba menggunakan ketinggian standar tetapi saya masih mendapatkan peringatan yang sama:
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
Saya juga telah membaca semua topik serupa tentang ini tetapi tidak ada solusi mereka yang membantu. Saat saya menguji aplikasi dengan simulator, aplikasi berjalan dengan baik kecuali gambar yang seharusnya ada di sel tableView tidak ada.
ios
objective-c
swift
xcode
uitableview
David E
sumber
sumber
Jawaban:
Tiga hal telah berhasil membungkam peringatan ini sejauh ini. Anda dapat memilih yang paling nyaman untuk Anda. Tidak ada yang cantik.
Untuk menyiapkan tinggi sel default di viewDidLoad
Buka papan cerita dan ubah tinggi baris pada tampilan tabel Anda menjadi sesuatu yang berbeda dari 44.
Untuk mengimplementasikan metode delegasi tableview heightForRowAtIndexPath
Aneh.
sumber
self.tableView.rowHeight = 44;
. Kesalahannya hilang! terima kasihAnda menemukan efek samping dari fitur baru yang fantastis di Tampilan Tabel iOS8: Ketinggian Baris Otomatis.
Di iOS 7, Anda memiliki baris dengan ukuran tetap (diatur dengan
tableView.rowHeight
), atau Anda akan menulis kode untuk menghitung tinggi sel Anda dan Anda akan mengembalikannyatableView:heightForRowAtIndexPath
. Menulis kode untuk menghitung tinggi sel bisa jadi sangat rumit jika Anda memiliki banyak tampilan di sel Anda dan Anda memiliki ketinggian berbeda untuk dipertimbangkan pada ukuran font yang berbeda. Tambahkan Dynamic Type dan prosesnya sangat menyebalkan.Di iOS 8, Anda masih dapat melakukan hal di atas, tetapi sekarang tinggi baris dapat ditentukan oleh iOS, asalkan Anda telah mengkonfigurasi konten sel Anda menggunakan Tata Letak Otomatis. Ini adalah keuntungan besar bagi pengembang, karena saat ukuran font dinamis berubah, atau pengguna mengubah ukuran teks menggunakan Pengaturan Aksesibilitas, UI Anda dapat beradaptasi dengan ukuran baru. Ini juga berarti jika Anda memiliki UILabel yang dapat memiliki beberapa baris teks, sel Anda sekarang dapat tumbuh untuk mengakomodasi baris tersebut saat sel membutuhkannya, dan menyusut jika tidak diperlukan, sehingga tidak ada spasi kosong yang tidak perlu.
Pesan peringatan yang Anda lihat memberi tahu Anda bahwa tidak ada batasan yang cukup di sel Anda untuk Tata Letak Otomatis untuk menginformasikan tampilan tabel ketinggian sel.
Untuk menggunakan tinggi sel dinamis, yang, bersama dengan teknik yang telah disebutkan oleh poster lain, juga akan menghilangkan pesan ini, Anda perlu memastikan sel Anda memiliki batasan yang memadai untuk mengikat item UI ke bagian atas dan bawah sel. Jika Anda pernah menggunakan Tata Letak Otomatis sebelumnya, Anda mungkin terbiasa menyetel batasan Atas + Utama, tetapi tinggi baris dinamis juga memerlukan batasan bawah.
Layout pass berfungsi seperti ini, yang terjadi tepat sebelum sel ditampilkan di layar, dengan cara tepat waktu:
Dimensi konten dengan ukuran intrinsik dihitung. Ini termasuk UILabels dan UIImageViews, yang dimensinya masing-masing didasarkan pada teks atau gambar UII yang dikandungnya. Kedua tampilan ini akan menganggap lebarnya diketahui (karena Anda telah menyetel batasan untuk tepi belakang / depan, atau Anda menyetel lebar eksplisit, atau Anda menggunakan batasan horizontal yang akhirnya memperlihatkan lebar dari sisi ke sisi). Misalkan sebuah label memiliki paragraf teks ("jumlah baris" disetel ke 0 sehingga akan otomatis terbungkus), itu hanya boleh menyilang 310 poin, jadi tinggi 120pt ditentukan pada ukuran font saat ini.
UI diatur sesuai dengan batasan pemosisian Anda. Ada batasan di bagian bawah label yang menghubungkan ke margin bawah sel. Karena label telah berkembang menjadi 120 poin, dan karena terikat ke bagian bawah sel oleh pembatas, label harus mendorong sel "ke bawah" (meningkatkan tinggi sel) untuk memenuhi pembatas yang bertuliskan "bagian bawah jarak label selalu standar dari bagian bawah sel.
Pesan kesalahan yang Anda laporkan terjadi jika batasan bawah itu hilang, dalam hal ini tidak ada yang "mendorong" bagian bawah sel menjauh dari bagian atas sel, yang merupakan ambiguitas yang dilaporkan: tanpa ada yang mendorong bagian bawah bagian atas, sel itu runtuh. Namun Tata Letak Otomatis juga mendeteksinya, dan kembali menggunakan tinggi baris standar.
Untuk apa nilainya, dan sebagian besar memiliki jawaban bulat, jika Anda menerapkan tinggi baris dinamis berbasis Tata Letak Otomatis iOS 8, Anda harus menerapkan
tableView:estimatedHeightForRowAtIndexPath:
. Metode perkiraan itu bisa menggunakan nilai kasar untuk sel Anda, dan itu akan dipanggil saat tampilan tabel pertama kali dimuat. Ini membantu UIKit menggambar hal-hal seperti scrollbar, yang tidak dapat ditarik kecuali jika tampilan tabel mengetahui berapa banyak konten yang dapat digulir, tetapi tidak memerlukan ukuran yang benar-benar akurat, karena ini hanya scrollbar. Ini memungkinkan penghitungan tinggi baris yang sebenarnya ditunda hingga saat sel dibutuhkan, yang kurang intensif secara komputasi dan memungkinkan UITableView Anda disajikan lebih cepat.sumber
Saya mengalami masalah ini setelah membuat kustom
UITableViewCell
dan menambahkan subview saya ke sel alih-alihnyacontentView
.sumber
Untuk mengatasi ini tanpa metode terprogram, sesuaikan tinggi baris tampilan tabel di Size Inspector dari storyboard.
sumber
Ini adalah masalah tata letak otomatis. Pastikan subview Anda memiliki semua batasan. Bagi saya, batasan bawah tidak ada untuk Label Judul di sel. Ketika saya menambahkan itu, peringatan itu hilang dan semuanya muncul dengan sempurna.
sumber
Cukup aktifkan Sel Tampilan Tabel Ukuran Sendiri
& pastikan Anda menambahkan batasan di semua sisi
UITableViewCell
sebagai-Contoh Tautan 1
Contoh Tautan 2
sumber
UITableViewAutomaticDimension
telah diubah namanya menjadiUITableView.automaticDimension
Jika Anda menggunakan sel statis atau sel dinamis, cukup tambahkan beberapa tinggi baris ke tampilan tabel di tabel inspektur dan hapus centang otomatis ke sisi kanan tinggi baris, itu saja u akan berhenti mendapatkan peringatan ini.
sumber
Saya mendapat peringatan ini hari ini. Inilah yang membuatnya hilang untuk saya (di pembuat antarmuka)
1. Atur bidang tinggi baris untuk tampilan tabel ke sesuatu selain 44 2 Atur bidang tinggi baris untuk sel tableView ke sesuatu selain 44
Saya tidak perlu mengubah kode apa pun
sumber
Dalam kasus saya, saya sedang membangun sel secara terprogram dan terus mendapatkan kesalahan ini.
Saya menambahkan subviews dan kendala dalam
UITableViewCell
'sinit
metode seperti ini:Saya memecahkan masalah dengan menambahkannya ke sel
contentView
sebagai gantinya:sumber
contentView
, bukanUITableViewCell
langsung.Setel perkiraan tinggi baris ke nol dan peringatan menghilang:
sumber
Saya juga mengalami peringatan ini saat pindah ke Xcode 6 GM. Saya hanya mendapatkan peringatan ketika saya memutar perangkat kembali ke posisi semula.
Saya menggunakan UITableViewCells kustom. Tampilan tabel storyboard diatur ke ukuran kustom saya (100.0 dalam kasus saya). Sementara sel tabel dirender dengan benar seperti pada rilis sebelumnya, saya tidak suka pesan peringatan.
Selain ide di atas, saya menambahkan ini
Tampilan layar ... merespons rotasi dan tidak ada lagi pesan peringatan.
sumber
Di xcode 6.0.1 saya telah menghapus peringatan ini yang menentukan tinggi baris menggunakan:
sumber
Jika Anda telah membuat TableViewCell Kustom untuk tableView, pastikan Anda telah memberikan batasan bawah dan atas ke sel Anda, Anda juga bisa mendapatkan pesan ini jika subview Anda di dalam sel kustom disejajarkan di tengah Y yang tidak akan memunculkan pesan kesalahan tetapi akan mengacaukan up dengan mengidentifikasi ketinggian baris untuk tableview pada gilirannya seperti pada Gambar yang telah saya lampirkan, di sini kita memiliki kendala atas dan bawah
Saat Anda membuat Sel Kustom untuk tableView, Anda harus menentukan ketinggian baris atau batasan atas dan bawah tertentu untuk subview sel kustom Anda di dalam sel (mis. Label di sel kustom seperti pada gambar di bawah)
Tetapi jika ini tidak berhasil, Anda dapat mencoba mengatur tinggi baris untuk sel Anda alih-alih menjadi otomatis seperti pada gambar ini
Tetapi pastikan jika Anda mematikan centang otomatis itu, Anda harus menyesuaikan ukuran baris Anda untuk perubahan secara terprogram yang bisa dilakukan secara otomatis.
sumber
Di papan cerita, atur
cell
Row height
bidang dengan nilai yang sama sepertiRow height
ditableView
(keduanya dengan nilai yang sama bekerja untuk saya).Jika Anda menambahkan
heightForRowAtIndexPath
fungsi ke kode Anda, ini dapat menyebabkan masalah kinerja karena akan dipanggil untuk setiap sel jadi berhati-hatilah.sumber
Anda juga dapat melihat pesan ini jika satu-satunya pembatas Anda disetel untuk meratakan semua item secara vertikal dan Anda tidak memiliki / ingin ketinggian yang ditentukan untuk sel. Jika Anda menyetel batasan atas / bawah pada item, peringatan akan hilang.
sumber
Saya mengalami masalah ini saat label dan tampilan saya di tableViewCell kustom dibatasi ke customCell, bukan Tampilan Kontennya. Ketika saya membersihkan batasan dan menghubungkannya ke sel Tampilan Konten, masalah telah terpecahkan.
sumber
Saya mendapat pesan error yang sama, pastikan semua outlet Anda valid seperti table view dan tableview Constraints
sumber
Jika Anda membuat kalkulasi ketinggian dinamis,
sumber
Saya juga memiliki masalah serupa untuk sel tableview kustom yang memiliki tinggi baris dinamis. Ketinggian dinamis tidak tercermin dan mendapat peringatan yang sama di konsol. Solusinya adalah Menambahkan subview ke sel alih-alih contentView. BTW, saya telah membuat subview secara terprogram.
sumber
Saya memiliki masalah ini
TableViewCell
di mana batasan ditetapkan pada inisialisasi tetapi di mana konten sel dimuat sesudahnya, ini berarti mesin autolayout tidak dapat menentukan ketinggian. Solusi lain di sini tidak berfungsi karena saya membutuhkan tinggi selUITableView.automaticDimension
.Saya baru saja menambahkan batasan ekstra ke sel:
sumber
Saya mendapat Peringatan ini hari ini Yang saya lakukan hanyalah menambahkan satu baris ekstra ke kode saya
tambahkan baris kode ini di dalam
dan kode terakhir terlihat seperti
kode ini akan meningkatkan tinggi sel baris tabel menjadi 200 tinggi default adalah 44
sumber
Saya memiliki kesalahan yang sama, karena baris ini kesalahan ini ditampilkan.
self.layer.backgroundColor = UIColor (putih: 1, alpha: 0.2) as! CGColor
Saya hanya mengubah baris sebagai berikut untuk memperbaiki kesalahan
self.layer.backgroundColor = UIColor (putih: 1, alpha: 0.2) .cgColor
sumber