Adakah yang punya ide bagaimana men-debug ini?
Peringatan hanya sekali: Mendeteksi kasus di mana batasan secara ambigu menyarankan ketinggian nol untuk tampilan konten sel tampilan tabel. Kami sedang mempertimbangkan keruntuhan secara tidak sengaja dan menggunakan ketinggian standar sebagai gantinya.
Baris memiliki ketinggian tetap seperti yang ditetapkan oleh
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 34.0;
}
Dan semua constraints
tampak bahagia ...
Apa yang juga bisa dilakukan adalah menambahkan batasan vertikal dari atas dan ke bawah tampilan konten. Ini akan membuat tata letak otomatis senang (karena dia sekarang tahu cara menghitung sendiri ketinggian sel).
sumber
Jika Anda menggunakan batasan autoLayout dan UITableViewAutomaticDimension, kesalahan ini bukanlah masalah yang salah untuk dibuang dengan mengganti tinggi Anda dalam kode. Artinya, menentukan ketinggian sel secara otomatis tidak berfungsi karena Anda tidak memiliki batasan vertikal yang tepat yang diperlukan.
Jika Anda seperti saya dan mendapatkan kesalahan ini dan membutuhkan bantuan untuk mengidentifikasi sel mana yang menyebabkan kesalahan, Anda dapat menambahkan baris berikut tepat sebelum kembalinya metode 'heightforRowAtIndexPath' Anda.
Ini akan mencetak daftar panjang bagian dan baris, tetapi kesalahan akan segera muncul setelah sel tertentu yang menyebabkan kesalahan, dan Anda dapat dengan cepat mengidentifikasi sel mana yang menyebabkan masalah dan memperbaiki batasan Anda. Ini sangat membantu untuk sel statis. Mengganti tinggi dengan angka yang dimasukkan secara manual akan berfungsi jika Anda tidak menggunakan autoLayout dan ketinggian sel otomatis, tetapi pada dasarnya akan menonaktifkan fitur-fitur ini yang merupakan solusi yang sangat buruk jika itu adalah sesuatu yang Anda coba gunakan.
Jika Anda sebelumnya tidak menggunakan metode 'heightForRowAtIndexPath' tetapi ingin men-debug kesalahan ini tanpa membatalkan setelan UITableViewAutomaticDimension Anda, cukup tambahkan ini ke kode Anda:
sumber
Tampaknya ada bug di XCode 6.1 yang menyebabkan masalah ini jika menggunakan tata letak otomatis dan Anda tidak menentukan nilai untuk Tinggi Baris untuk setiap Sel Tampilan Tabel, tetapi Anda membiarkan nilai "default". Cukup dengan mencentang kotak "Custom" di sebelah Row Height, untuk setiap sel, membuat peringatan hilang.
sumber
Ya, Anda mendapatkan semua batasan "senang" bahkan jika Anda hanya memiliki batasan horizontal untuk item dalam sel tampilan tabel. Saya memiliki masalah yang sama. Anda juga perlu menambahkan batasan vertikal. Dengan melakukan itu, peringatan itu akan hilang.
sumber
Batasan bisa menyenangkan untuk tujuan tata letak, tetapi tidak senang untuk tujuan tinggi baris otomatis. Tata letak yang menyenangkan berarti konten dapat ditata tanpa ambiguitas. Itu akan memenuhi pemeriksaan di Interface Builder.
Tata letak yang menyenangkan untuk tinggi baris otomatis berarti, selain di atas, Anda juga menyertakan pembatas ke bagian bawah sel.
Selengkapnya di sini: Mendeteksi kasus di mana batasan secara ambigu menunjukkan ketinggian nol
sumber
Saya menggunakan Row Height 43 (atau <> 44) di inspektur ukuran Table View dan kesalahan menghilang. Menggunakan 44 saya mendapatkan kesalahan. Xcode versi 6.0.1.
- Jawaban ini telah dihapus oleh moderator, tolong jangan, itu memperbaiki masalah. Ini MENYELESAIKAN masalah untuk saya dan mungkin melakukannya untuk orang lain juga. Jadi bisakah Anda berbaik hati untuk tidak menghapusnya lagi.
sumber
Saya tidak bisa menghapus peringatan, tetapi untuk membuat batasan bekerja saya mengatur, baru untuk iOS8, properti tableview
estimatedRowHeight
ke ketinggian tetap, dan menghapusheightForRowAtIndexPath
implementasi.sumber
Jika Anda mendapatkan peringatan itu, kemungkinan besar karena Anda menggunakan tata letak otomatis dan sel Anda tidak memiliki batasan di dalamnya.
Anda harus berhenti menggunakan tata letak otomatis atau menerapkan batasan yang secara jelas menentukan tinggi sel.
Anda dapat menonaktifkan tata letak otomatis di pembuat antarmuka dengan menghapus centang opsi "Gunakan Tata Letak Otomatis" di pemeriksa file di sebelah kanan.
Jika Anda memilih untuk menggunakan tata letak otomatis dan tinggi sel Anda sudah diperbaiki, menerapkan batasan yang sesuai semestinya mudah. Cukup tambahkan batasan ketinggian untuk sub-tampilan dari tampilan konten sel, dan terapkan batasan ruang vertikal antara sub-tampilan, dan antara sub-tampilan dan tampilan konten. Misalnya jika sel Anda memiliki satu label di dalamnya, ini akan berfungsi:
Batasan vertikal
Batasan horizontal
sumber
Anda dapat menggunakan AutoLayout untuk menghitung ketinggian yang tepat untuk Anda. Berikut adalah posting bagus tentang Dynamic Cell Height di iOS 8: http://natashatherobot.com/ios-8-self-sizing-table-view-cells-with-dynamic-type/
sumber
Di Swift memaksa ketinggian kembali memperbaiki masalah saya:
sumber
Untuk perbaikan standar rawa, tidak ada kendala, tidak ada perkiraan ketinggian, atau masalah rekayasa berlebihan. Saya membuat proyek default, menghubungkan tableview tetapi lupa meletakkan delegasi ketinggian di pengontrol tampilan . Untuk membuat peringatan ini pergi, Anda memerlukan ini.
Di pengontrol tampilan tabel Anda.
sumber
Saya menggunakan mapView di dalam uitableviewcell. Saya mengubah ketinggian tampilan peta menjadi 1/3 dari ukuran layar perangkat. Saya mendapat kesalahan yang sama. Saya memperbaiki kesalahan dengan menambahkan batasan yang hilang ke tampilan konten uitableviewcell.
1) Hapus batasan contentView.
2) Setel Reset ke konstanta yang Disarankan ke contentView.
3) Tambahkan kendala yang hilang - jika ada
4) Kami memastikan tampilan konten memiliki semua batasan yang diperlukan.
sumber
Dalam kasus saya, itu karena saya mendesain sel dengan xib, dan saya lupa menambahkan file xib itu ke target.
Setelah saya menambahkan file xib itu ke target, masalahnya hilang
sumber
Meskipun jawaban di halaman ini membahas penambahan batasan ketinggian atau secara manual mengembalikan rowHeights seperti 44 di heightForRowAtIndexPath menyebabkan peringatan menghilang, mereka tidak berguna karena ini adalah bug di Xcode yang terlihat setidaknya di Versi 6.3.2 (6D2105).
Jika Anda menyetel breakpoint di viewDidLoad, Anda akan melihat self.tableView.rowHeight = -1 (UITableViewAutomaticDimension) meskipun Anda menentukan tinggi baris 44 di storyboard. Ini karena Apple salah mengasumsikan bahwa Anda menginginkan tinggi baris dinamis jika Anda membiarkan tinggi baris pada 44, karena mereka tidak memberikan bendera untuk Anda tentukan preferensi Anda.
Berikut beberapa solusi yang mungkin dan hasilnya:
Atur tinggi baris menjadi 43 atau 45 di storyboard (berhasil).
Kembalikan tinggi 44 secara manual di heightForRowAtIndexPath (berfungsi).
Tambahkan batasan ketinggian antara elemen UITableViewCell dan contentView-nya (berfungsi).
Sayangnya, solusi ini mengharuskan Anda untuk mengubah desain, menambahkan batasan yang tidak perlu, atau menambahkan kode yang tidak perlu untuk mengatasi bug. Saya mencoba (apa yang saya pikir) solusi paling sederhana:
Saya sangat menginginkan solusi storyboard murni untuk ini, jadi akhirnya saya mencoba:

Bug ini terlalu umum dalam pengembangan iOS dan memaksa pengembang menghabiskan waktu berlebihan menimbang konsekuensi dari bagaimana solusi mereka akan memengaruhi pemeliharaan dalam jangka panjang.
Karena menemukan solusi konseptual yang benar yang dapat dipelihara dan tampaknya tidak dikaburkan begitu sulit dipahami, dan dengan asumsi bahwa Apple akan memperbaiki bug dan 44 akan menjadi tinggi baris default untuk masa mendatang, maka batasan atau ditentukan pengguna solusi atribut runtime mungkin yang paling mudah dipelihara.
sumber
Ada dua hal penting yang terjadi di sini, menurut saya.
1) Sangat mudah untuk membuat pembatas menjadi salah jika Anda menekan ctrl + seret. Jadi, periksa kembali apakah Anda telah melakukannya dengan benar. Paling baik menggunakan baki di sisi kiri layar untuk menggambar batasan ini.
2) Alih-alih menentukan estimRowHeight di ViewDidLoad atau di tempat lain, gunakan metode delegasi
Ini langsung memperbaiki masalah saya.
sumber
Saya juga melihat kesalahan ini saat menggunakan papan cerita universal atau xibs. Jika Anda lalai menentukan batasan yang tepat untuk kelas ukuran Any x Any, saya telah melihat kesalahan ini muncul.
Apple tampaknya telah memperbaiki ini untuk iOS9. Kesalahan hanya terjadi pada 8.4 untuk saya.
sumber
Saya berputar-putar selama berhari-hari antara kesalahan ini dan kesalahan lain di mana batasan dibuat (tidak tahu di mana) yang bertentangan dengan batasan yang saya inginkan. Saya bahkan membuatnya berfungsi dalam satu contoh di mana setiap properti yang terlihat identik dengan yang lain. Satu-satunya solusi yang saya temukan adalah menggunakan atomic - buat file yang sama sekali baru dengan xib dan mulai lagi menghubungkan kembali outlet dengan menyalin-tempel kode lama. Ini mungkin bukan solusi terbaik, tetapi terkadang, jika masalahnya tidak terlihat, tidak banyak yang bisa dilakukan. Setidaknya, menjadi atom adalah cara yang baik untuk meninjau apa yang sedang terjadi.
sumber