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?

flohei
sumber
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.

Tomen
sumber
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)

Martin Stolz
sumber
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.

Chris
sumber
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;
Jirune
sumber
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.

iosCurator
sumber
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.

Liron Yahdav
sumber
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
}
stan
sumber
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)

Chisx
sumber
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.

Bharath
sumber
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
}
Murlakatam
sumber