Mengurangi ruang antar bagian UITableView


141

Apakah ada cara untuk mengurangi ruang antara dua bagian dari UITableView? Ada sekitar 15 piksel antara setiap bagian yang saya miliki. Saya sudah mencoba mengembalikan 0 untuk -tableView:heightForFooterInSection:dan -tableView:heightForHeaderInSection:tetapi itu tidak mengubah apa pun.

Ada saran?


1
Saya menggunakan tableView yang dikelompokkan dan mengatur tinggi header / footer ke 0.0. Tapi itu menunjukkan area abu-abu dengan ketinggian 30point (default). Penggunaan 0.0tidak dapat diterima. Anda harus menggunakan nilai apa pun di atas, 0.0misalnya 0.0001.
Sayang

Seperti yang dikatakan @Honey 0.0tidak bekerja. Saya punya jawaban yang lebih menyeluruh untuk masalah yang sama di sini: stackoverflow.com/a/22185534/2789144
James Nelson

Jawaban:


263

Agak sulit, tetapi coba kode ini:

- (CGFloat)tableView:(UITableView*)tableView 
           heightForHeaderInSection:(NSInteger)section {
    if (section == 0) {
        return 6.0;
    }

    return 1.0;
}

- (CGFloat)tableView:(UITableView*)tableView 
           heightForFooterInSection:(NSInteger)section {
    return 5.0;
}

- (UIView*)tableView:(UITableView*)tableView 
           viewForHeaderInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

- (UIView*)tableView:(UITableView*)tableView 
           viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

Ubah nilainya sesuai. Untuk menghapus spasi, saya pikir 0,0 tidak akan diterima. Nilai waras terkecil tampaknya menjadi 1,0.


2
Anda harus mengembalikan 5.0f, bukan 5.0, karena konflik melayang ganda
LeonS

45
Anda bahkan dapat mengembalikan 0,00001f sebagai tinggi dan Anda akan mendapatkan tinggi 0 piksel / poin.
Klaas

1
Seperti yang ditunjukkan oleh @Klass, Anda tidak dapat menggunakan 0sebagai ketinggian - Anda akan mendapatkan ketinggian default.
zekel

26
Mengapa tidak menggunakan CGFLOAT_MIN? Ini dibuat untuk skenario semacam ini :)
Andrei Filip

12
Jika menggunakan swift, Anda dapat kembaliCGFloat.leastNonzeroMagnitude
oztune

140

Untuk semua yang ingin mengecilkan jarak ke 0, Anda harus menggunakan:

tableView.sectionHeaderHeight = 0.0;
tableView.sectionFooterHeight = 0.0;

Karena penyajian UITableViewDelegate hanya membuat efek mulai dari mengapung lebih besar dari nol.

-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
    return 1.0;
}


-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section
{
    return 1.0;
}

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

(menggunakan iOS 4.1 dengan XCode 4.0.2)


7
kembalikan 0,0001; bekerja untuk saya. Saya menggunakan xcode 4.6 dan iOS 6.1
Sam

Saya hanya perlu mengembalikan CGFLOAT_MIN dalam dua metode pertama dan berfungsi dengan baik.
Julius

bukannya 0 digunakanreturn .leastNormalMagnitude
stan

33

Anda benar-benar dapat mengatur ketinggian footer / header / sel di Interface Builder di bawah tab ukuran. Secara default header / footer ditetapkan pada 10.0.


Saya pikir perilaku seperti itu ditambahkan di iOS 5.0 atau iOS 6.0, tapi ya - sekarang jauh lebih mudah untuk mengatur jarak antar grup.
Vlas Voloshin

2
Saya tahu ini sudah lama tetapi saya ingin berkomentar bahwa pada XCode 5 dan iOS 7, sepertinya ini HARUS dilakukan dalam kode. Saya mengaturnya di antarmuka pembangun ke 0 dan itu masih diatur ke 1 sampai saya mengaturnya dalam kode ke 0.
Ahmad

Dengan Xcode 6 dan iOS 8 tampaknya hanya berfungsi dengan konfigurasi di storyboard.
Murray Sagal

mereka diatur ke 18 pada xcode 7 secara default. tapi itu sejauh ini solusi termudah!
static0886

27

Anda harus mengurangi tinggi bagian tajuk / footer. Maka ruang antar bagian akan berkurang.

coba kode ini

Ini bekerja untuk saya :-)

tableView.sectionHeaderHeight = 2.0;
tableView.sectionFooterHeight = 2.0;

21

Anda juga dapat mengurangi ketinggian bagian footer dan header dari storyboard. Dalam tampilan tabel -> ukuran inspektur. Pergi ke Bagian Tinggi.

Pemeriksa ukuran untuk UITableView di storyboard.

Secara default diatur ke 22 untuk tabel gaya polos dan 10 untuk tabel gaya dikelompokkan. Anda dapat mengkonfigurasi nilai dengan menambah / mengurangi nilai untuk header dan footer secara terpisah.


6

Bagi saya masalahnya adalah karena saya menggunakan gaya tampilan tabel yang dikelompokkan ( UITableViewStyleGrouped). Ketika saya mengubahnya menjadi gaya biasa ( UITableViewStylePlain) tableView:heightForHeaderInSection:metode saya adalah satu-satunya hal yang menentukan ukuran setiap header bagian.


4

Gunakan ini mungkin, 0 tidak akan berfungsi seperti yang diharapkan

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
     return .leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

3

PEMBARUAN UNTUK iOS7: Karena pembaruan autorelease ARC, inilah kode @Martin Stolz yang diedit.

-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == 0)
        return 6;
    return 1.0;
}

-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section
{
    return 5.0;
}

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

(Menggunakan iOS7, Xcode v5.0)


0

Bagi saya, masalah ini diselesaikan hanya dengan menggunakan kode berikut,

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return section == 0 ? 1 : 20 // 20 is my other sections height
}

Mengembalikan 1 untuk bagian pertama telah menyelesaikan masalah.


0

Untuk mengubah ruang header / footer metode berikut harus dilaksanakan:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

DAN

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat

(gunakan metode yang sesuai untuk mengubah tinggi footer)

Kode berikut sepenuhnya menghilangkan spasi di sekitar bagian:

public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return nil
}

public func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return nil
}

public func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}

public func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.