Saya memiliki UITableView dengan dua bagian. Ini adalah tampilan tabel sederhana. Saya menggunakan viewForHeaderInSection untuk membuat tampilan kustom untuk header ini. Sejauh ini baik.
Perilaku pengguliran default adalah bahwa ketika suatu bagian ditemui, header bagian tetap berlabuh di bawah bilah Nav, hingga bagian berikutnya bergulir ke tampilan.
Pertanyaan saya adalah ini: dapatkah saya mengubah perilaku default sehingga header bagian TIDAK tetap berlabuh di atas, melainkan, gulir di bawah bilah nav dengan sisa baris bagian?
Apakah saya kehilangan sesuatu yang jelas?
Terima kasih.
ios
iphone
uitableview
cocoa-touch
davidjhinson
sumber
sumber
Jawaban:
Cara saya memecahkan masalah ini adalah dengan menyesuaikan
contentOffset
sesuai dengancontentInset
diUITableViewControllerDelegate
(meluasUIScrollViewDelegate
) seperti ini:Satu-satunya masalah di sini adalah ia kehilangan sedikit pantulan ketika menggulir kembali ke atas.
{CATATAN: "40" harus sama persis dengan header bagian 0 ANDA. Jika Anda menggunakan angka yang lebih besar dari tinggi bagian 0 header Anda, Anda akan melihat bahwa rasa-jari terpengaruh (coba seperti "1000" dan Anda akan melihat perilaku bouncing agak aneh di atas). jika nomornya cocok dengan tinggi bagian 0 header Anda, nuansa jari tampaknya sempurna atau hampir sempurna.}
sumber
Anda juga dapat menambahkan bagian dengan nol baris di bagian atas dan cukup menggunakan footer dari bagian sebelumnya sebagai header untuk yang berikutnya.
sumber
Jika saya melakukan ini, saya akan mengambil keuntungan dari fakta bahwa UITableViews dalam gaya Polos memiliki header yang lengket dan yang dalam gaya Grouped tidak. Saya mungkin paling tidak akan mencoba menggunakan sel tabel kustom untuk meniru tampilan sel Plain di tabel yang dikelompokkan.
Saya belum benar-benar mencoba ini sehingga mungkin tidak berhasil, tapi itulah yang saya sarankan lakukan.
sumber
tableView.separatorColor = [UIColor clearColor];
untuk meniru tampilan tabel biasa.Saya tahu ini datang terlambat, tetapi saya telah menemukan solusi definitif!
Apa yang ingin Anda lakukan adalah jika Anda memiliki 10 bagian, biarkan dataSource kembali 20. Gunakan angka genap untuk header bagian, dan angka ganjil untuk konten bagian. sesuatu seperti ini
Voa! : D
sumber
UITableView
yang saya gunakan.Ada beberapa hal yang perlu dilakukan untuk menyelesaikan masalah ini secara non-hacky:
UITableViewStyleGrouped
backgroundColor
menjadi[UIColor clearColor]
backgroundView
pada setiap sel tampilan tabel ke tampilan kosong denganbackgroundColor [UIColor clearColor]
rowHeight
tepat, atau gantitableView:heightForRowAtIndexPath:
jika masing-masing baris memiliki ketinggian yang berbeda.sumber
UITableViewStyleGrouped
sel tabel memiliki margin tambahan yang mengubah perataannya dengan header. Ini adalah masalah ketika Anda benar-benar ingin menggambarkan tabel multi-kolom dan menggunakan header untuk menampilkan judul kolom (dan kemudian membuat entri tabel individu sejajar dengan judul-judul ini).Awalnya diposting di sini , solusi cepat menggunakan IB. Hal yang sama dapat dilakukan secara terprogram meskipun cukup sederhana.
Beberapa orang berkomentar mengatakan bahwa solusi ini menyembunyikan header pertama, namun saya belum melihat adanya masalah seperti itu. Ini bekerja dengan sempurna untuk saya dan sejauh ini merupakan solusi paling sederhana yang pernah saya lihat sejauh ini.
sumber
Saya tidak senang dengan solusi yang dijelaskan di sini sejauh ini, jadi saya mencoba menggabungkannya. Hasilnya adalah kode berikut, terinspirasi oleh @awulf dan @cescofry. Ini bekerja untuk saya karena saya tidak memiliki header tampilan tabel nyata. Jika Anda sudah memiliki header tampilan tabel, Anda mungkin harus menyesuaikan ketinggian.
sumber
Cukup ubah Gaya TableView:
Dokumentasi UITableViewStyle :
sumber
Pilih gaya Tampilan Tabel Dikelompokkan dari tableView's Attribute Inspector Anda di storyboard.
sumber
Atur tajuk Lihat tabel dengan tampilan transparan dengan ketinggian tajuk yang sama di tampilan bagian. Juga memulai tampilan tabel dengan bingkai di -tinggi.
sumber
Saya menemukan solusi alternatif, gunakan sel pertama dari setiap bagian, bukan bagian header nyata, solusi ini tidak tampak begitu bersih, tetapi berfungsi dengan sangat baik, Anda dapat menggunakan sel prototipe yang ditentukan untuk bagian header Anda, dan dalam metode cellForRowAtIndexPath minta indexPath.row == 0, jika benar, gunakan sel prototipe bagian header, kalau tidak gunakan sel prototipe default Anda.
sumber
indexPath.row
&indexPath.section
, pastikan Anda mengembalikan tinggi0.0f
untuk- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
sehingga header Anda tidak terlihat.Ubah Gaya TableView Anda:
Sesuai dokumentasi apel untuk UITableView:
sumber
Sekarang gaya yang dikelompokkan pada dasarnya terlihat sama dengan gaya biasa di iOS 7 (dalam hal kerataan dan latar belakang), bagi kami perbaikan terbaik dan termudah (yaitu paling tidak hacky) adalah dengan hanya mengubah gaya tampilan tabel menjadi dikelompokkan. Jacking dengan contentInsets selalu menjadi masalah ketika kami mengintegrasikan bilah nav scroll-away di bagian atas. Dengan gaya tampilan tabel yang dikelompokkan, tampilannya persis sama (dengan sel kami) dan header bagian tetap diperbaiki. Tidak ada keanehan yang bergulir.
sumber
Tetapkan inset negatif ke tableView Anda. Jika Anda memiliki header bagian tinggi 22px, dan Anda tidak ingin itu menjadi lengket, segera setelah Anda memuat ulang Data, tambahkan:
Bekerja seperti pesona bagi saya. Juga berfungsi untuk bagian footer, cukup tetapkan inset negatif di bagian bawah.
sumber
Saya menambahkan tabel ke Tampilan Gulir dan tampaknya berfungsi dengan baik.
sumber
Periksa jawaban saya di sini . Ini adalah cara termudah untuk mengimplementasikan tajuk bagian yang tidak mengambang tanpa peretasan.
sumber
Jawaban @ LocoMike paling cocok dengan tableView saya, namun itu rusak ketika menggunakan footer juga. Jadi, ini adalah solusi yang diperbaiki ketika menggunakan header dan footer:
sumber
Versi cepat jawaban @awulf, yang sangat bagus!
sumber
Saya telah belajar bahwa hanya menyetel properti tableHeaderView melakukannya, yaitu:
dan hanya itu.
sumber