Ответ 1
Вы пытались переопределить эту функцию:
override func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return .leastNormalMagnitude
}
Мне нужно уменьшить пространство между двумя разделами UITableView
. Я посмотрел на это question, но это решение не разрешает мое собственное представление заголовка, потому что оно объединяет пространство нижнего колонтитула и заголовка.
Вот изображение UITableView
. Черный цвет - это цвет фона UITableView
.
Вы пытались переопределить эту функцию:
override func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return .leastNormalMagnitude
}
Я думаю, вы можете решить это, отрегулировав высоту представления нижнего колонтитула до минимального значения: в раскадровке или XIB.
Я не знаю, что вы написали в своем коде для высоты нижнего колонтитула. Извините, если я ошибаюсь.
Возможный дубликат Скрыть просмотр нижнего колонтитула в UITableView
Для Swift 3
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return CGFloat.leastNormalMagnitude
}
Вам нужно использовать метод heightForHeaderInSection для определения пространства между заголовком и текстом ячейки. Вы также можете изменить его в зависимости от разных разделов, например. в некоторых разделах вам может потребоваться больше расстояния, а под некоторыми, вы не хотите показывать пробел. В таком случае вы можете использовать CGFLOAT_MIN, который равен 0,000001f. Приведя пример, как вы можете использовать другой раздел с разными высотами заголовков
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (section == 0 || section == 2)
{
return 55.0;
}
else
{
return CGFLOAT_MIN;
}
}
Надеюсь, это поможет вам.
Наряду с ответом, опубликованным Icaro, я хотел бы добавить, что вам также нужно реализовать tableView:viewForFooterInSection:
метод, возвращающий nil
для раздела, для которого вы хотите удалить пустое пространство ниже. Затем он станет:
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0.001f;
}
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return nil;
}
Для 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()
}
Это также может помочь:
override func viewDidLoad() {
super.viewDidLoad()
tableView.sectionHeaderHeight = UITableViewAutomaticDimension
}
Методы 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];
}
Вы можете сделать это, выполнив делегат 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;
}