Скрыть нижний колонтитул в UITableView

Некоторое время я работал над скрытием нижнего колонтитула. Моя проблема в том, что у меня есть кнопка в нижнем колонтитуле, когда я нажимаю кнопку, один раздел будет добавлен ниже в качестве последнего раздела, и кнопка тоже перейдет во вновь созданный раздел, и теперь я хочу скрыть нижний колонтитул в предыдущем разделе таблицы после обновления разделов.

footerView.hidden = YES

Я использовал это в действии кнопки, но он не работает.


person New Xcoder    schedule 12.07.2012    source источник


Ответы (8)


Есть четыре решения. Они есть,

Решение 1.

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

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

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

Решение 2:

Вы можете установить высоту нижнего колонтитула / верхнего колонтитула с помощью конструктора интерфейса на вкладке размера.

Решение 3:

установить свойство contentInset.

self.tableView.contentInset = UIEdgeInsetsMake(-20, 0, -20, 0);

Он используется для того, чтобы верх и низ касались края.

Решение 4:

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

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger )section {
    if(section == 0) {
       return 6;
    } else {
       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)];
}
person Shamsudheen TK    schedule 12.07.2012
comment
@@ Ramshad Вы должны указать или указать на работу, которую вы копируете. Кроме того, указание 0,00001f приводит к нулевой высоте. stackoverflow.com/ вопросы / 2817308 / - person Matt; 28.08.2014

Это должно сделать это

tableView.tableFooterView.hidden = YES;
person shabbirv    schedule 12.07.2012
comment
Тогда я не думаю, что вы пытаетесь скрыть footerView, а скорее последнюю ячейку раздела. Мой ответ правильно показывает, как скрыть footerView - person shabbirv; 12.07.2012
comment
Это не скрывает человека из нижнего интервью. Следующий раздел тянется за нижним колонтитулом. - person New Xcoder; 12.07.2012
comment
Существует два вида представлений нижнего колонтитула: tableFooterView и sectionFooterView. Отсюда путаница ... - person Rok Jarc; 08.04.2014
comment
Чтобы он заработал, вам нужно сделать следующее: - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { [tableView.tableFooterView setHidden:YES]; return 1.0f; } Ключевой момент - return 1.0f - person Hwangho Kim; 16.12.2015
comment
Это не работает. Нижние колонтитулы разделов не скрываются и даже не уменьшаются до нулевой высоты. - person hasen; 13.02.2018

Это можно сделать, реализовав метод делегата

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
  return CGFLOAT_MIN;
}
person J.Hong    schedule 15.11.2016

Что касается ответа @JHong, версия Swift4 (iOS 11.3):

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

По сравнению с ответом @Tim Newton:

  • нет необходимости звонить titleForFooterInSection
  • упрощать CGFloat.leastNormalMagnitude -> .leastNonzeroMagnitude (подробнее Swifty IMO)
person Kamil Harasimowicz    schedule 09.06.2018

Решение Swift 3.0, которое также удаляет надоедливую границу в 1 пиксель между предыдущей ячейкой и следующим заголовком.

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

override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
    return nil
}
person Tim Newton    schedule 02.03.2017
comment
Мне нужно показать / скрыть нижний колонтитул на основе HTTP-запроса. Как я могу применить изменения? Я думаю, потому что ваш пример выполняется изначально. - person JCarlosR; 08.05.2017

в swift4:

self.tableView.tableFooterView = nil
person Mohamad.j    schedule 19.08.2018

Если пользовательские представления не используются, верните nil из tableView:titleForFooterInSection: и 0 из tableView:heightForFooterInSection:.

@property(nonatomic, strong) NSString *footerTitle;
@property(nonatomic, assign) BOOL shouldHideFooter;
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
    return self.shouldHideFooter ? nil : self.footerTitle;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return self.shouldHideFooter ? 0 : UITableViewAutomaticDimension;
}
person bteapot    schedule 25.01.2017

Решение Swift 5: (скрывает нижние колонтитулы разделов, вам может понадобиться еще один элемент, чтобы избавиться от нижнего колонтитула таблицы)

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

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return UIView()
}
person Dylan Reich    schedule 03.05.2020