UITableView bölümleri arasındaki boşluğu azaltma


141

UITableView öğesinin iki bölümü arasındaki boşluğu azaltmanın bir yolu var mı? Sahip olduğum her bir bölüm arasında yaklaşık 15 piksel var. Zaten için 0 döndürmeye çalıştım -tableView:heightForFooterInSection:ve -tableView:heightForHeaderInSection:bu hiçbir şey değişmez.

Baska öneri?


1
Gruplandırılmış bir tableView kullanıyordum ve üstbilgi / altbilgi yüksekliğini ayarlıyordum 0.0. Ancak (varsayılan) 30 nokta yüksekliğinde gri bir alan gösteriyordu. Kullanmak 0.0kabul edilmez. Yukarıdaki herhangi bir değeri kullanmalıdır 0.0örn 0.0001.
Bal

@Honey'in dediği 0.0gibi çalışmıyor. Burada aynı sorun için daha kapsamlı bir cevabım var: stackoverflow.com/a/22185534/2789144
James Nelson

Yanıtlar:


263

Biraz zor oldu, ama bu kodu deneyin:

- (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];
}

Değerleri uygun şekilde değiştirin. Alanı kaldırmak için bence 0.0 kabul edilmeyecek. En küçük aklı başında değer 1.0 gibi görünüyor.


2
Şamandıra çatışmaları nedeniyle 5.0 yerine 5.0f döndürmelisiniz
LeonS

45
Yükseklik olarak 0.00001f değerini döndürebilir ve 0 piksel / nokta yüksekliğine sahip olabilirsiniz.
Klaas

1
@Klass'ın işaret ettiği 0gibi, yükseklik olarak kullanamazsınız - varsayılan yüksekliği elde edersiniz.
zekel

26
Neden CGFLOAT_MIN kullanılmıyor? Bu tür senaryolar için yapıldı :)
Andrei Filip

12
Hızlı kullanıyorsanız, geri dönebilirsinizCGFloat.leastNonzeroMagnitude
oztune

140

Mesafeyi 0'a küçültmek isteyen herkes için kullanmanız gerekir:

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

Çünkü UITableViewDelegate'in sunumu yalnızca sıfırdan büyük şamandıralardan başlayarak bir etki yapar.

-(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];
}

(XCode 4.0.2 ile iOS 4.1 kullanılıyor)


7
dönüş 0.0001; benim için çalışıyor. Xcode 4.6 ve iOS 6.1 kullanıyorum
Sam

Sadece ilk iki yöntem CGFLOAT_MIN dönmek gerekir ve iyi çalışıyor.
Julius

0 kullanımı yerinereturn .leastNormalMagnitude
stan

33

Arayüz Oluşturucu'da altbilgi / başlık / hücre yüksekliklerini boyut sekmesi altında ayarlayabilirsiniz. Varsayılan olarak üstbilgi / altbilgi 10.0 olarak ayarlanmıştır.


Bu tür davranışların iOS 5.0 veya iOS 6.0'da eklendiğini düşünüyorum, ancak evet - artık gruplar arasındaki mesafeyi ayarlamak çok daha kolay.
Vlas Voloshin

2
Bunun eski olduğunu biliyorum ama XCode 5 ve iOS 7'den itibaren kodda yapılması gereken gibi görünüyor. Arayüz oluşturucusunda 0'a ayarladım ve kodu 0'a ayarlayana kadar hala 1'e ayarlandı.
Ahmad

Xcode 6 ve iOS 8 ile, film şeridindeki yapılandırma ile çalışıyor gibi görünüyor.
Murray Sagal

varsayılan olarak xcode 7'de 18 olarak ayarlanmıştır. ama bu en kolay çözüm!
static0886

27

Bölüm üstbilgisi / altbilgisi yüksekliğini azaltmanız gerekir. Sonra bölümler arasındaki boşluk azalacaktır.

bu kodu dene

Benim için çalışıyor :-)

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

21

Film şeridinden bölüm altbilgisi ve üstbilgisinin yüksekliğini de azaltabilirsiniz. Tablo görünümünde -> boyut denetçisi. Bölüm Yüksekliği'ne gidin.

Film şeridinde UITableView için boyut denetçisi.

Varsayılan olarak Düz stil tablosu için 22, gruplandırılmış stil tablosu için 10 olarak ayarlanmıştır. Üstbilgi ve altbilgi değerlerini ayrı ayrı artırarak / azaltarak değerleri yapılandırabilirsiniz.


6

Benim için sorun, bir gruplandırılmış tablo görünümü stili ( UITableViewStyleGrouped) kullanıyordu çünkü . Düz bir style ( UITableViewStylePlain) olarak değiştirdiğimde tableView:heightForHeaderInSection:, her bölüm üstbilgisinin boyutunu belirleyen tek şey yöntemimdi.


4

Bunu belki kullanın, 0 beklendiği gibi çalışmaz

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

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

3

İOS7 İÇİN GÜNCELLEME: ARC otomatik yayın güncellemesi nedeniyle, @Martin Stolz kodu düzenlendi.

-(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)];
}

(İOS7, Xcode v5.0 kullanarak)


0

Benim için bu sorun sadece aşağıdaki kodu kullanarak çözüldü,

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

Geri dönen 1 birinci bölüm için konuyu çözdü.


0

Aşağıdaki yöntemler üstbilgi / altbilgi alanını değiştirmek için gereken uygulanacak:

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

VE

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

(altbilgi yüksekliğini değiştirmek için ilgili yöntemleri kullanın)

Aşağıdaki kod, bölümlerin etrafındaki boşlukları tamamen kaldırır:

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
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.