Сокращение пространства между разделами UITableView

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

Любые предложения?

Ответ 1

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

- (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.

Ответ 2

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

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

Потому что обслуживание UITableViewDelegate делает только эффект, начиная с float больше нуля.

-(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)

Ответ 3

Фактически вы можете установить высоты нижнего колонтитула/заголовка/ячейки в Interface Builder под вкладкой размера. По умолчанию верхний/нижний колонтитул установлен в 10.0.

Ответ 4

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

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

Это работает для меня: -)

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

Ответ 5

Вы также можете уменьшить высоту нижнего колонтитула и заголовка секции из раскадровки. В диспетчере tableview → size. Перейдите к разделу Высота раздела.

Size inspector for UITableView in storyboard.

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

Ответ 6

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

Ответ 7

Если вы измените стиль с "Сгруппированный" на "Обычный", пространство полностью исчезнет. Вы все еще можете использовать разделы.

Ответ 8

ОБНОВЛЕНИЕ ДЛЯ iOS7: Из-за обновления ARO autorelease здесь редактируется код @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)

Ответ 9

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

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

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

Ответ 10

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

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

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