Подтвердить что ты не робот

Пространство между разделами в UITableview

Мне нужно уменьшить пространство между двумя разделами UITableView. Я посмотрел на это question, но это решение не разрешает мое собственное представление заголовка, потому что оно объединяет пространство нижнего колонтитула и заголовка.

Вот изображение UITableView. Черный цвет - это цвет фона UITableView.

tableview screenshot

4b9b3361

Ответ 1

Вы пытались переопределить эту функцию:

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

Ответ 2

Я думаю, вы можете решить это, отрегулировав высоту представления нижнего колонтитула до минимального значения: в раскадровке или XIB. enter image description here

Я не знаю, что вы написали в своем коде для высоты нижнего колонтитула. Извините, если я ошибаюсь.

Возможный дубликат Скрыть просмотр нижнего колонтитула в UITableView

Ответ 3

Для Swift 3

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

Ответ 4

Вам нужно использовать метод heightForHeaderInSection для определения пространства между заголовком и текстом ячейки. Вы также можете изменить его в зависимости от разных разделов, например. в некоторых разделах вам может потребоваться больше расстояния, а под некоторыми, вы не хотите показывать пробел. В таком случае вы можете использовать CGFLOAT_MIN, который равен 0,000001f. Приведя пример, как вы можете использовать другой раздел с разными высотами заголовков

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0 || section == 2)
    {
        return 55.0;
    }
    else
    {
        return CGFLOAT_MIN;
    }
}

Надеюсь, это поможет вам.

Ответ 5

Наряду с ответом, опубликованным Icaro, я хотел бы добавить, что вам также нужно реализовать tableView:viewForFooterInSection: метод, возвращающий nil для раздела, для которого вы хотите удалить пустое пространство ниже. Затем он станет:

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 0.001f;
}

-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return nil;
}

Ответ 6

Для Swift 4+ вам нужно переопределить эти два метода

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

override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return UIView()
    }

Ответ 7

Это также может помочь:

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.sectionHeaderHeight = UITableViewAutomaticDimension
}

Ответ 8

Методы TableView Delegate не действуют, если значение с плавающей запятой равно 0.0f. Попробуйте дать значение больше, чем это.

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 0.00001f;
}

- (UIView*)tableView:(UITableView*)tableView
viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

Ответ 9

Вы можете сделать это, выполнив делегат heightForHeaderInSection и heightForFooterInSection.

Возвращаемая vaule не должна быть 0, даже если SectionHeader или высота SectionFooter равны 0, ему нужно очень маленькое значение, попробуйте CGFLOAT_MIN.

для моего примера:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
if (section == [self.dataArray indexOfObject:self.bannerList]) {
    return 46;
}
return CGFLOAT_MIN;

}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}