Zmniejszenie miejsca między sekcjami UITableView


141

Czy istnieje sposób na zmniejszenie odstępu między dwiema sekcjami UITableView? Pomiędzy każdą moją sekcją jest około 15 pikseli. I już nie starać się powrócić do 0 -tableView:heightForFooterInSection:i -tableView:heightForHeaderInSection:ale to niczego nie zmienia.

Jakieś sugestie?


1
I był przy użyciu pogrupowany tableView i ustawiając wysokość nagłówka / stopki 0.0. Ale pokazywał szary obszar o (domyślnej) wysokości 30 punktów. Używanie 0.0jest niedozwolone. musisz użyć dowolnej wartości powyżej, 0.0np 0.0001.
Miód

Jak mówi @Honey, 0.0nie działa. Mam tutaj dokładniejszą odpowiedź na ten sam problem: stackoverflow.com/a/22185534/2789144
James Nelson

Odpowiedzi:


263

To było trochę trudne, ale wypróbuj ten kod:

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

Zmień odpowiednio wartości. Myślę, że aby usunąć spację, 0.0 nie zostanie zaakceptowane. Najmniejsza rozsądna wartość wydaje się wynosić 1,0.


2
Powinieneś zwrócić 5,0f zamiast 5,0, z powodu konfliktów podwójnej liczby zmiennoprzecinkowej
LeonS

45
Możesz nawet zwrócić 0,00001f jako wysokość, a otrzymasz wysokość 0 pikseli / punktów.
Klaas

1
Jak wskazuje @Klass, nie możesz użyć 0jako wysokości - otrzymasz domyślną wysokość.
zekel

26
Dlaczego nie użyć CGFLOAT_MIN? Jest stworzony do takich scenariuszy :)
Andrei Filip

12
Jeśli używasz szybkiego, możesz wrócićCGFloat.leastNonzeroMagnitude
oztune

140

Dla wszystkich, którzy chcą zmniejszyć odległość do 0, musisz użyć:

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

Ponieważ obsługa UITableViewDelegate powoduje tylko efekt zaczynający się od wartości zmiennoprzecinkowych większych niż zero.

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

(przy użyciu iOS 4.1 z XCode 4.0.2)


7
return 0,0001; pracuje dla mnie. Używam xcode 4.6 i iOS 6.1
Sam

Muszę tylko zwrócić CGFLOAT_MIN w pierwszych dwóch metodach i działa dobrze.
Julius

zamiast 0 użyjreturn .leastNormalMagnitude
stan

33

W rzeczywistości możesz ustawić wysokość stopki / nagłówka / komórki w Interface Builder pod zakładką rozmiaru. Domyślnie nagłówek / stopka są ustawione na 10,0.


Myślę, że takie zachowanie zostało dodane w iOS 5.0 lub iOS 6.0, ale tak - teraz znacznie łatwiej jest ustawić odległość między grupami.
Vlas Voloshin

2
Wiem, że to jest stare, ale chciałem skomentować, że od XCode 5 i iOS 7 wygląda na to, że MUSI to być zrobione w kodzie. Ustawiłem go w konstruktorze interfejsu na 0 i nadal był ustawiony na 1, dopóki nie ustawiłem go w kodzie na 0.
Ahmad.

W przypadku Xcode 6 i iOS 8 wydaje się, że działa tylko z konfiguracją w scenorysie.
Murray Sagal

są domyślnie ustawione na 18 w xcode 7. ale to zdecydowanie najłatwiejsze rozwiązanie!
static0886

27

Musisz zmniejszyć wysokość nagłówka / stopki sekcji. Wtedy przestrzeń między sekcjami zostanie zmniejszona.

wypróbuj ten kod

Mi to pasuje :-)

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

21

Możesz także zmniejszyć wysokość stopki sekcji i nagłówka z serii ujęć. W widoku tabeli -> inspektor rozmiaru. Przejdź do sekcji Wysokość.

Inspektor rozmiaru dla UITableView w scenorysie.

Domyślnie jest ustawiony na 22 dla tabeli stylu zwykłego i 10 dla tabeli stylu zgrupowanego. Możesz skonfigurować wartości, zwiększając / zmniejszając osobno wartości nagłówka i stopki.


6

Dla mnie problem polegał na tym, że użyłem stylu widoku tabeli zgrupowanej ( UITableViewStyleGrouped). Kiedy zmieniłem to na zwykły style ( UITableViewStylePlain), moja tableView:heightForHeaderInSection:metoda była jedyną rzeczą określającą rozmiar każdego nagłówka sekcji.


4

Użyj tego, być może, 0 nie zadziała zgodnie z oczekiwaniami

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

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

3

AKTUALIZACJA DLA iOS7: W związku z aktualizacją automatycznego wydania ARC, tutaj edytowany jest kod @Martin Stolz.

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

(Przy użyciu iOS7, Xcode v5.0)


0

Dla mnie ten problem został rozwiązany po prostu za pomocą następującego kodu,

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

Zwrócenie 1 w pierwszej sekcji rozwiązało problem.


0

Aby zmienić miejsce nagłówka / stopki następujące metody muszą być realizowane:

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

I

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

(użyj odpowiednich metod, aby zmienić wysokość stopki)

Poniższy kod całkowicie usuwa spacje wokół sekcji:

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
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.