Autolayout diabaikan di Custom UITableViewCell

93

Meskipun telah menetapkan batasan untuk semua elemen, termasuk yang vertikal yang diperlukan sel untuk menghitung tingginya, tata letak otomatis tampaknya diabaikan: semua sel diperas.

Berikut tangkapan layar dari hasil dan batasan di papan cerita. masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Di VC yang menyimpan tableView, berikut kode di viewDidLoad:

tableView.estimatedRowHeight = 120.0
tableView.rowHeight = UITableViewAutomaticDimension

Mengomentari baris kedua memberikan sel dengan tinggi 120.0 tetapi Autolayout juga diabaikan.

Terima kasih


Memperbarui

Untuk menyederhanakan antarmuka, saya meninggalkan satu label dengan, sebagai batasan:

  • Ruang utama untuk superview
  • Ruang atas untuk melihat super
  • Lebar dan tinggi tetap (100 & 100)
  • Ruang bawah ke margin penampung untuk memastikan bahwa sel memiliki semua batasan vertikal untuk menentukan tingginya

Dan dengan antarmuka yang disederhanakan ini, tata letak otomatis masih belum diperhitungkan, yang mengisyaratkan kepada saya bahwa masalahnya tidak berasal dari batasan yang ditetapkan dengan buruk.

Di Size Inspector, tinggi baris disetel ke 120 dan Kustom dicentang. Sel memiliki kelas kustom yang tepat, pengenal penggunaan ulang sel sudah benar.


Pembaruan: solusi ditemukan

Ini adalah kesalahan sederhana, lihat jawaban saya di bawah.

Kqtr
sumber
Periksa terminal debug Anda - apakah ada log NSLayoutConstraint di sana yang menunjukkan ada sesuatu yang tidak berfungsi seperti yang diharapkan?
Matthew Hallatt
Tidak ada yang muncul di terminal debug @MatthewHallatt, terima kasih.
Kqtr
@Kqtr coba beri komentar pada dua baris ini dan kemudian jalankan secara normal sekali untuk memeriksa apakah ada perubahan?
Tushar Sharma
@TusharSharma Mengomentari dua baris memiliki efek yang sama seperti mengomentari baris rowHeight saja: sel memiliki tinggi 120,0, tetapi tata letak otomatis tidak berfungsi.
Kqtr
1
Apakah pembuat antarmuka menunjukkan batasan yang hilang atau ambigu? Periksa tanda seru kuning atau merah kecil.
Matthew Hallatt

Jawaban:

250

Tata letak otomatis diabaikan karena baik sel prototipe DAN UIView sel telah diberi kelas sel khusus di IB.

Mengatur UIView kembali ke kelas UIView memecahkan masalah.

hanya untuk memperjelas

Kqtr
sumber
2
Saya terjebak dalam masalah ini selama berjam-jam dan ini menyelesaikannya, terima kasih!
candidev
Saya menyia-nyiakan hampir sepanjang hari sampai saya datang ke sini .... Ribuan terima kasih kepada Anda.
lahir
-3

Saya pikir masalahnya adalah Anda menerapkan:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: 
IndexPath) -> CGFloat {

 return x
}

Anda perlu menghapus fungsi ini secara inorder untuk tableview guna menghitung tinggi otomatisnya untuk sel.

Jaafar Barek
sumber
Terima kasih, sayangnya saya tidak menimpanya: Saya sebenarnya bahkan tidak memiliki delegasi untuk tableView ini, hanya sumber data.
Kqtr
Apakah Anda menyetel batasan textview ke semua tepi untuk sel? Dan apakah Anda menonaktifkan scrolling textView?
Jaafar Barek
Label multi-baris (0 baris) memiliki batasan untuk 1) spasi vertikal dengan angka di kiri 2) spasi atas ke superview 3) spasi tambahan ke superview dan 4) spasi bawah dengan label Asked By.
Kqtr