Saya mencoba menyesuaikan ketinggian sel untuk salah satu sel pada tampilan tabel saya. Saya menyesuaikan ukuran dari pengaturan "tinggi baris" di dalam "inspektur ukuran" sel yang dimaksud. Ketika saya menjalankan aplikasi di iPhone saya, sel memiliki ukuran default yang ditetapkan dari "ukuran baris" pada tampilan tabel.
Jika saya mengubah "ukuran baris" dari tampilan tabel maka ukuran semua sel berubah. Saya tidak ingin melakukan itu karena saya ingin ukuran khusus hanya untuk satu sel. Saya telah melihat banyak posting yang memiliki solusi terprogram untuk masalah ini, tetapi saya lebih suka melakukannya melalui storyboard, jika itu mungkin.
sumber
UITableView
konten dariDynamic Prototypes
menjadiStatic Cells
, saya melakukan itu, dan seluruh proyek saya meledak .. hampir terbunuh sendiri.Jika Anda menggunakan UITableViewController, terapkan metode ini:
Dalam fungsi baris, Anda dapat memilih Tinggi. Sebagai contoh,
Dalam contoh ini, tinggi baris pertama adalah 100 piksel, dan yang lainnya adalah 60 piksel.
Saya harap yang ini dapat membantu Anda.
sumber
Untuk sel dinamis,
rowHeight
aturUITableView
selalu menimpa sel individualrowHeight
.Perilaku ini, IMO, bug. Kapan pun Anda harus mengelola UI di dua tempat, ia cenderung mengalami kesalahan. Misalnya, jika Anda mengubah ukuran sel di storyboard, Anda harus ingat untuk mengubahnya
heightForRowAtIndexPath:
juga. Sampai Apple memperbaiki bug, solusi terbaik saat ini adalah untuk menimpanyaheightForRowAtIndexPath:
, tetapi gunakan sel prototipe yang sebenarnya dari storyboard untuk menentukan ketinggian daripada menggunakan angka ajaib . Ini sebuah contoh:Ini akan memastikan setiap perubahan ketinggian sel prototipe Anda akan secara otomatis diambil pada saat runtime dan Anda hanya perlu mengelola UI Anda di satu tempat: storyboard.
sumber
Saya telah membangun kode yang berisi berbagai jawaban / komentar yang mengisyaratkan agar ini berfungsi untuk storyboard yang menggunakan sel prototipe.
Kode ini:
Berkat Answerserbot, Brennan, dan lensovet.
sumber
Sebenarnya ada dua tempat di mana Anda perlu mengubah ke ketinggian baris, pertama sel (Anda sudah mengubahnya) dan sekarang pilih Table View dan periksa Size Inspector
sumber
Saya pikir itu adalah bug.
Coba sesuaikan ketinggian bukan oleh inspektur Utilitas tetapi dengan seret mouse di storyboard secara langsung.
Saya memecahkan masalah ini dengan metode ini.
sumber
Jika Anda menggunakan swift, gunakan seperti ini. Jangan Gunakan storyboard untuk memilih tinggi baris. Secara terprogram mengatur ketinggian baris tabel seperti ini,
sumber
cell.sizeToFit(); self.tableView.rowHeight = cell.frame.height
Anda bisa mendapatkan ketinggian UITableviewCell (di UITableviewController - sel statis) dari storyboard dengan bantuan baris berikut.
sumber
Buka storyboard dalam tampilan XML dan coba edit
rowHeight
atribut elemen yang diinginkan.Itu bekerja untuk saya ketika saya mencoba untuk mengatur baris kustom Tinggi untuk baris prototipe saya. Itu tidak bekerja melalui inspektur, tetapi melalui XML berfungsi.
sumber
Anda dapat menggunakan prototipe
cells
dengan kebiasaanheight
, lalu memohoncellForRowAtIndexPath:
dan mengembalikannyaframe.height
.:.sumber
Jika Anda ingin mengatur tinggi baris statis, Anda dapat melakukan sesuatu seperti ini:
sumber
Saya baru-baru ini bergulat dengan ini. Masalah saya adalah solusi yang diposting di atas menggunakan
heightForRowAtIndexPath:
metode ini akan bekerja untuk iOS 7.1 di Simulator tetapi kemudian benar-benar mengacaukan hasil dengan hanya beralih ke iOS 8.1.Saya mulai membaca lebih banyak tentang sel ukuran sendiri (diperkenalkan di iOS 8, baca di sini ). Tampak jelas bahwa penggunaan
UITableViewAutomaticDimension
akan membantu di iOS 8. Saya mencoba menggunakan teknik itu dan menghapus penggunaanheightForRowAtIndexPath:
dan voila, sekarang berfungsi dengan sempurna di iOS 8 sekarang. Tetapi iOS 7 tidak. Apa yang harus saya lakukan? Saya diperlukanheightForRowAtIndexPath:
untuk iOS 7 dan bukan untuk iOS 8.Inilah solusi saya (dipangkas demi singkatnya) yang meminjam dari jawaban @ JosephephH diposting di atas:
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO (@ "8.0") sebenarnya dari sekumpulan definisi makro yang saya gunakan yang saya temukan di suatu tempat (sangat membantu). Mereka didefinisikan sebagai:
sumber
Masalah yang sama terjadi ketika bekerja pada XCode 9 menggunakan Swift 4 .
Tambahkan AutoLayout untuk elemen UI di dalam Sel dan tinggi baris sel kustom akan bekerja sesuai yang ditentukan.
sumber
Untuk sel dinamis, rowHeight yang diatur pada UITableView selalu mengesampingkan rowHeight masing-masing sel. Hitung saja tinggi dinamis jika konten di dalam baris.
sumber
Satu-satunya solusi nyata yang bisa saya temukan adalah ini
Ini berfungsi dan memungkinkan untuk tidak memiliki saklar yang mengerikan / jika menduplikasi logika sudah ada di StoryBoard. Tidak yakin tentang kinerja tetapi saya kira ketika tiba di
cellForRow:
sel yang sudah diinisialisasi itu secepat. Tentu saja mungkin ada kerusakan jaminan di sini, tetapi sepertinya itu berfungsi dengan baik untuk saya di sini.Saya juga memposting ini di sini: https://devforums.apple.com/message/772464
EDIT: Ortwin Gentz mengingatkan saya bahwa
heightForRowAtIndexPath:
akan dipanggil untuk semua sel TableView, tidak hanya yang terlihat. Kedengarannya logis karena iOS perlu mengetahui tinggi total untuk dapat menampilkan bilah gulir yang benar. Itu berarti mungkin baik-baik saja pada TableViews kecil (seperti 20 Cell) tetapi lupakan tentang itu pada 1000 Cell TableView.Juga, trik sebelumnya dengan XML: Sama seperti komentar pertama untuk saya. Nilai yang benar sudah ada di sana.
sumber
Ditambahkan sebagai komentar, tetapi memposting sebagai jawaban untuk visibilitas:
Tampaknya juga ada masalah jika Anda awalnya mengatur tampilan tabel sebagai "sel statis" dan kemudian mengubahnya menjadi "prototipe dinamis." Saya memiliki masalah di mana bahkan metode delegasi untuk
heightForRowAtIndexPath
diabaikan. Saya pertama kali mengatasinya dengan langsung mengedit storyboard XML, kemudian akhirnya hanya membangun kembali adegan storyboard dari awal, menggunakan prototipe dinamis dari awal.sumber
Mengingat bahwa saya tidak menemukan solusi untuk masalah ini melalui Interface Builder, saya memutuskan untuk mengirim solusi terprogram untuk masalah di Swift menggunakan dua sel dinamis , meskipun pertanyaan awal meminta solusi melalui Interface Builder. Bagaimanapun saya pikir ini bisa bermanfaat untuk komunitas Stack Overflow:
sumber
Satu hal lain yang dapat Anda lakukan adalah pergi ke Document Outline Anda, pilih tampilan tabel bahwa sel prototipe Anda bersarang. Kemudian pada Pemeriksa Ukuran, ubah tampilan tabel Anda Ketinggian Baris ke nilai yang Anda inginkan dan hapus centang pada kotak Otomatis.
sumber