Уменьшение пространства между разделами UITableView

141

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

Какие-либо предложения?

Flohei
источник
1
Я использовал сгруппированный tableView и установил высоту верхнего / нижнего колонтитула на 0.0. Но он показывал серую область с высотой (по умолчанию) 30 точек. Использование 0.0не допускается. вы должны использовать любое значение выше, 0.0например 0.0001.
Дорогая,
Как говорит @Honey 0.0, не работает. У меня есть более подробный ответ на ту же проблему здесь: stackoverflow.com/a/22185534/2789144
Джеймс Нельсон

Ответы:

264

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

- (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
Вы должны вернуть 5.0f вместо 5.0 из-за конфликтов
двойных чисел с
45
Вы даже можете вернуть 0,00001f в качестве высоты, и вы получите высоту 0 пикселей / точек.
Klaas
1
Как указывает @Klass, вы не можете использовать 0в качестве высоты - вы получите высоту по умолчанию.
zekel
26
Почему бы не использовать CGFLOAT_MIN? Он создан для таких сценариев :)
Андрей Филип
12
Если вы используете CGFloat.leastNonzeroMagnitude
Swift
141

Для всех, кто хочет уменьшить расстояние до 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)

Мартин Штольц
источник
7
возврат 0,0001; у меня работает. Я использую xcode 4.6 и iOS 6.1
Сэм,
Мне нужно только вернуть CGFLOAT_MIN в первых двух методах, и он отлично работает.
Юлий
вместо 0 используйтеreturn .leastNormalMagnitude
стан
33

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

Крис
источник
Я думаю, что такое поведение было добавлено в iOS 5.0 или iOS 6.0, но да - теперь намного проще настроить расстояние между группами.
Влас Волошин
2
Я знаю, что это устарело, но я хотел прокомментировать, что начиная с XCode 5 и iOS 7, похоже, это ДОЛЖНО выполняться в коде. Я установил его в построителе интерфейса на 0, и он все еще был установлен на 1, пока я не установил его в коде на 0.
Ахмад
С Xcode 6 и iOS 8 он, похоже, работает только с конфигурацией в раскадровке.
Мюррей Сагал
по умолчанию они установлены на 18 в xcode 7. но это, безусловно, самое простое решение!
static0886
27

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

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

Меня устраивает :-)

tableView.sectionHeaderHeight = 2.0;
tableView.sectionFooterHeight = 2.0;
Джируне
источник
21

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

Инспектор размера для UITableView в раскадровке.

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

iosCurator
источник
6

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

Лирон Яхдав
источник
5

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

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

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}
Стэн
источник
3

ОБНОВЛЕНИЕ ДЛЯ 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)

Chisx
источник
0

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

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

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

Бхарата
источник
0

Чтобы изменить пространство верхнего / нижнего колонтитула , необходимо реализовать следующие методы :

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

А ТАКЖЕ

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

(используйте соответствующие методы для изменения высоты нижнего колонтитула)

Следующий код полностью удаляет пробелы вокруг разделов:

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
}
Мурлакатам
источник