Baru di iOS 8, Anda bisa mendapatkan 100% sel tampilan tabel dinamis hanya dengan mengatur perkiraan tinggi baris, lalu tata letak elemen Anda di sel menggunakan Tata Letak Otomatis. Jika konten bertambah tinggi, sel juga akan bertambah tinggi. Ini sangat berguna, dan saya bertanya-tanya apakah prestasi yang sama dapat dicapai untuk header bagian dalam tampilan tabel?
Dapatkah seseorang, misalnya, membuat UIView
masuk tableView:viewForHeaderInSection:
, menambahkan UILabel
subview, menentukan batasan tata letak otomatis untuk label terhadap tampilan, dan meningkatkan tinggi tampilan agar sesuai dengan konten label, tanpa harus menerapkan tableView:heightForHeaderInSection:
?
Dokumentasi untuk viewForHeaderInSection
status: "Metode ini hanya berfungsi dengan benar jika tableView: heightForHeaderInSection: juga diimplementasikan." Saya belum mendengar apakah ada yang berubah untuk iOS 8.
Jika seseorang tidak dapat melakukan itu, apa cara terbaik untuk meniru perilaku ini?
sumber
UITableViewAutomaticDimension
mengatakan "jika Anda mengembalikan konstanta ini dalamtableView:heightForHeaderInSection:
atautableView:heightForFooterInSection:
,UITableView
menggunakan ketinggian yang sesuai dengan nilai yang dikembalikan daritableView:titleForHeaderInSection:
atautableView:titleForFooterInSection:
(jika judulnya tidaknil
)."estimatedSectionHeaderHeight
atautableView:estimatedHeightForHeaderInSection:
DANsectionHeaderHeight
atautableView:heightForHeaderInSection:
. Selain itu, jika Anda menggunakan metode delegasi, Anda harus mengembalikan nilai yang lebih besar dari 1,00 untuk perkiraan (perilaku yang benar-benar tidak terdokumentasi), jika tidak, delegasi untuk tinggi TIDAK akan dipanggil dan tinggi header tampilan tabel default akan digunakan.Ini dapat dilakukan dengan mengatur (atau mengembalikan)
estimatedSectionHeaderHeight
pada tampilan tabel Anda.Jika tajuk bagian Anda tumpang tindih dengan sel Anda setelah pengaturan
estimatedSectionHeaderHeight
, pastikan Anda menggunakanestimatedRowHeight
juga.(Saya menambahkan jawaban ini karena paragraf kedua berisi jawaban untuk masalah yang dapat ditemukan setelah membaca semua komentar yang mungkin terlewatkan oleh sebagian orang.)
sumber
estimatedRowHeight
ini berfungsi seperti pesona :)Terjebak dalam masalah yang sama di mana tajuk mendapatkan ketinggian nol hingga dan kecuali saya memberikan ketinggian tetap pada delegasi untuk
heighForHeaderInSection
.Mencoba banyak solusi yang termasuk
Tapi tidak ada yang berhasil. Ponsel saya juga menggunakan tata letak otomatis yang benar. Baris mengubah tinggi mereka secara dinamis dengan menggunakan kode berikut tetapi tajuk bagian tidak.
Perbaikannya juga sangat sederhana dan aneh tetapi saya harus menerapkan metode delegasi alih-alih kode 1 baris untuk
estimatedSectionHeaderHeight
dansectionHeaderHeight
yang berlaku sebagai berikut untuk kasus saya.sumber
Cepat 4+
bekerja (Diuji 100%)
Jika Anda membutuhkan kedua bagian serta baris dengan ketinggian dinamis berdasarkan konten maka Anda dapat menggunakan kode di bawah ini:
Di viewDidLoad () tulis baris ini:
Sekarang kita telah mengatur tinggi baris dan tinggi bagian dengan menggunakan metode UITableView Delegate:
sumber
Saya mencoba
tetapi ukurannya tidak tepat untuk header dengan label multiline. Menambahkan ini untuk menyelesaikan masalah saya:
sumber
tableView:estimatedHeightForHeaderInSection
dantableView:heightForHeaderInSection
bukannya menentukan di viewDidLoad.estimatedSectionHeaderHeight
hanya diperlukan di bawah iOS 11Dalam kasus saya:
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
.diatur di storyboard tidak berfungsi .
override
heightForHeaderInSection
berhasil .uji lingkungan:
sumber
Ya, itu berhasil untuk saya. Saya harus membuat lebih banyak perubahan seperti di bawah ini:
sumber
Saya mengubah jawaban iuriimoz . Baru saja mengganti metode viewWillAppear:
Tambahkan juga tableView.layoutIfNeeded () ke
Untuk iOS 10
beri efek animasi "memudar" di viewWillAppear untuk saya
sumber