Karena desain tampilan tabel menggunakan gaya yang dikelompokkan berubah drastis dengan iOS 7, saya ingin menyembunyikan (atau menghapus) tajuk bagian pertama. Sejauh ini saya belum berhasil mencapainya.
Agak disederhanakan, kode saya terlihat seperti ini:
- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (section == 0)
return 0.0f;
return 32.0f;
}
- (UIView*) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if (section == 0) {
UIView* view = [[UIView alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 640.0f, 0.0f)];
return view;
}
return nil;
}
- (NSString*) tableView:(UITableView *) tableView titleForHeaderInSection:(NSInteger)section
{
if (section == 0) {
return nil;
} else {
// return some string here ...
}
}
Jika saya mengembalikan tinggi 0, dua metode lainnya tidak akan pernah dipanggil dengan indeks bagian 0. Namun header bagian kosong masih digambar dengan tinggi default. (Di iOS 6, kedua metode ini dipanggil. Namun, hasil yang terlihat sama.)
Jika saya mengembalikan nilai yang berbeda, header bagian mendapatkan ketinggian yang ditentukan.
Jika saya mengembalikan 0,01, itu hampir benar. Namun, saat saya mengaktifkan "Warna Gambar Tidak Sejajar" di simulator, ini menandai semua sel tampilan tabel (yang tampaknya merupakan konsekuensi logis).
Jawaban atas pertanyaan UITableView: hide header from empty section sepertinya menunjukkan bahwa beberapa orang berhasil menyembunyikan header bagian tersebut. Tapi itu mungkin berlaku untuk gaya polos (bukan yang dikelompokkan).
Kompromi terbaik sejauh ini adalah mengembalikan tinggi 0,5, menghasilkan garis yang agak lebih tebal di bawah bilah navigasi. Namun, saya akan menghargai jika ada yang tahu bagaimana header bagian pertama dapat disembunyikan sepenuhnya.
Memperbarui
Menurut analisis caglar ( https://stackoverflow.com/a/19056823/413337 ), masalah hanya muncul jika tampilan tabel terdapat dalam pengontrol navigasi.
sumber
section == 0
.Jawaban:
Saya memiliki solusi yang tampaknya cukup bersih bagi saya. Jadi saya menjawab pertanyaan saya sendiri.
Karena 0 sebagai tinggi header bagian pertama tidak berfungsi, saya mengembalikan 1. Kemudian saya menggunakan contentInset untuk menyembunyikan ketinggian itu di bawah bilah navigasi.
Objective-C:
Cepat:
sumber
CGFLOAT_MIN
nilai hard-code. Dengan kata lain, janganreturn 1.0f
atau0.1f
sebaliknya,return CGFLOAT_MIN
Jika Apple pernah mengubah nilai minimum yang dapat diterima, Anda akan memiliki kode untuk diubah jika Anda melakukan hard-code pada nilai pengembalian. Selain itu, Anda sudah tidak tahu apakah Anda menggunakan nilai sekecil mungkin. Dengan menggunakan konstanta yang ditentukan, Anda dijamin akan menggunakan nilai sekecil mungkin dan kode Anda akan bertahan dari perubahan OS.Ini adalah cara menyembunyikan header bagian pertama di UITableView (gaya yang dikelompokkan).
Solusi Swift 3.0 & Xcode 8.0
Delegasi TableView harus mengimplementasikan metode heightForHeaderInSection
Dalam metode heightForHeaderInSection, kembalikan bilangan positif terkecil. (bukan nol!)
sumber
CGFLOAT_MIN
untuk objc identik denganCGFloat.leastNonzeroMagnitude
di SwiftJawabannya sangat lucu bagi saya dan tim saya, dan bekerja dengan sangat baik
ALASAN:
Kami mengamati bahwa ini hanya terjadi untuk Tampilan Pertama dalam Hierarki Tampilan, jika tampilan pertama ini adalah UITableView . Jadi, semua UITableView serupa lainnya tidak memiliki bagian yang mengganggu ini, kecuali yang pertama. Kami Mencoba memindahkan UITableView dari tempat pertama dalam hierarki tampilan, dan semuanya berfungsi seperti yang diharapkan.
sumber
contentInset
ke misalnya{0, 64, 0, 0}
untuk memiliki 64px offset dari atas (status bar plus bar navigasi). TableView perlu dilampirkan di bagian atas layar, bukan topLayoutGuide (agar dapat menjangkau di bawah bilah navigasi)Gunakan trik ini untuk tipe tableView yang dikelompokkan
Salin tempel kode di bawah ini untuk tampilan tabel Anda dalam metode viewDidLoad :
sumber
_tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 1)]
.cara ini tidak apa-apa.
sumber
Saya baru saja menyalin kode Anda dan mencoba. Ini berjalan normal (dicoba di simulator). Saya melampirkan tampilan hasil. Anda ingin pemandangan seperti itu, bukan? Atau saya salah paham dengan masalah Anda?
sumber
Swift3: heightForHeaderInSection berfungsi dengan 0, Anda hanya perlu memastikan header disetel ke clipsToBounds.
jika Anda tidak mengatur clipsToBounds header tersembunyi akan terlihat saat menggulir.
sumber
Pembaruan [9/19/17]: Jawaban lama tidak lagi berfungsi untuk saya di iOS 11. Terima kasih Apple. Berikut ini dilakukan:
Jawaban Sebelumnya:
Seperti yang diposting di komentar oleh Chris Ostomo , yang berikut ini berhasil untuk saya:
sumber
Berikut adalah cara menghilangkan header bagian atas dalam UITableView yang dikelompokkan, di Swift:
sumber
Di Swift 4.2 dan banyak versi sebelumnya, alih-alih menyetel tinggi header pertama ke 0 seperti di jawaban lain, Anda bisa menyetel header lain ke
nil
. Katakanlah Anda memiliki dua bagian dan hanya ingin bagian kedua (yaitu1
) memiliki tajuk. Header itu akan memiliki teks Foobar :sumber
Coba ini jika Anda ingin menghapus semua header bagian sepenuhnya
sumber
Saya belum bisa berkomentar tetapi saya pikir saya akan menambahkan bahwa jika Anda memiliki
UISearchController
pengontrol denganUISearchBar
sebagai milik AndatableHeaderView
, mengatur ketinggian bagian pertama sebagai 0 dalamheightForHeaderInSection
memang berfungsi.Saya menggunakan
self.tableView.contentOffset = CGPointMake(0, self.searchController.searchBar.frame.size.height);
agar bilah pencarian disembunyikan secara default.Hasilnya adalah tidak ada tajuk untuk bagian pertama, dan menggulir ke bawah akan menampilkan bilah pencarian tepat di atas baris pertama.
sumber
termudah sejauh ini adalah untuk kembali
nil
, atau""
difunc tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
untuk bagian di mana Anda tidak ingin menampilkan sundulan.sumber
Versi Swift: Swift 5.1
Kebanyakan, Anda dapat mengatur ketinggian di delegasi tableView seperti ini:
Terkadang saat Anda membuat UITableView dengan Xib atau Storyboard, jawaban atas tidak berfungsi. Anda dapat mencoba solusi kedua:
Semoga berhasil untuk Anda!
sumber