Сокращение пространства между разделами UITableView - PullRequest
137 голосов
/ 12 мая 2010

Есть ли способ уменьшить пространство между двумя разделами UITableView? Между каждым разделом у меня есть около 15 пикселей. Я уже пытался вернуть 0 для -tableView:heightForFooterInSection: и -tableView:heightForHeaderInSection:, но это ничего не меняет.

Есть предложения?

Ответы [ 9 ]

257 голосов
/ 12 мая 2010

Это было немного сложно, но попробуйте этот код:

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

Измените значения соответственно. Чтобы удалить пробел, я думаю, что 0,0 не будет принято. Наименьшее вменяемое значение представляется равным 1,0.

137 голосов
/ 12 сентября 2011

Для всех, кто хочет уменьшить расстояние до 0, вы должны использовать:

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

Поскольку использование UITableViewDelegate дает эффект только начиная с числа с плавающей точкой, большего нуля.

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

(с использованием iOS 4.1 с XCode 4.0.2)

33 голосов
/ 27 января 2011

На самом деле вы можете установить высоту нижнего колонтитула / заголовка / ячейки в Интерфейсном Разработчике на вкладке размера. По умолчанию верхний и нижний колонтитулы установлены на 10.0.

25 голосов
/ 01 июня 2011

Вы должны уменьшить заголовок раздела / высоту нижнего колонтитула. Тогда пространство между разделами будет уменьшено.

попробуйте этот код

У меня работает: -)

tableView.sectionHeaderHeight = 2.0;
tableView.sectionFooterHeight = 2.0;
21 голосов
/ 14 мая 2015

Вы также можете уменьшить высоту нижнего колонтитула и заголовка раздела из раскадровки. В табличном представлении -> размер инспектора. Перейти к разделу Высота.

Size inspector for UITableView in storyboard.

По умолчанию установлено 22 для простой таблицы стилей и 10 для сгруппированной таблицы стилей. Вы можете настроить значения, увеличив / уменьшив значения для верхнего и нижнего колонтитула отдельно.

5 голосов
/ 28 июня 2016

Для меня проблема заключалась в том, что я использовал стиль сгруппированного табличного представления (UITableViewStyleGrouped). Когда я изменил его на простой стиль (UITableViewStylePlain), мой tableView:heightForHeaderInSection: метод был единственным, что определяло размер каждого заголовка раздела.

3 голосов
/ 05 января 2014

ОБНОВЛЕНИЕ ДЛЯ iOS7: Из-за автоматического обновления ARC приведен отредактированный код @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)];
}

(с использованием iOS7, Xcode v5.0)

0 голосов
/ 30 ноября 2018

Используйте это возможно, 0 не будет работать, как ожидалось

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

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}
0 голосов
/ 09 марта 2017

Для меня эта проблема была решена только с помощью следующего кода,

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

Возвращение 1 для первого раздела решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...