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

Как мы можем скрыть tableHeaderView и tableFooterView?

У меня есть две кнопки, которые я добавляю в один столбец таблицы и другой в заголовке таблицы, я знаю, как скрыть заголовок таблицы, используя этот код table.tableHeaderView.hidden = YES; но проблема в том, что в верхней части таблицы все еще есть место. Это пространство равно размеру заголовка, но представление скрыто. У него все еще есть пространство. Как мы можем отключить заголовок таблицы, удалив это space.I надеюсь, что гениальные разработчики поймут мой вопрос. Пожалуйста, помогите мне. Спасибо заранее.

4b9b3361

Ответ 1

Вместо того, чтобы скрывать вид заголовка, вы должны сделать,

tableView.tableHeaderView = nil

А потом, если вы хотите показать это, просто назначьте его снова,

tableView.tableHeaderView = tableHeaderView;

В Свифте:

class myTableViewController: UITableViewController {

    @IBOutlet var tableHeaderView: UIView!

    private func toggleHeaderView() {
        if tableView.tableHeaderView == nil {
            tableView.tableHeaderView = tableHeaderView 
        } else { 
            tableView.tableHeaderView = nil 
        }
    }

}

на раскадровке просто перетащите UIView в табличное представление. Он "волшебным образом" станет заголовком табличного представления (если вы сделаете другой, он станет нижним колонтитулом табличного представления). ОДНАКО вы должны нажать на это представление заголовка и перетащить выходную ссылку на контроллер табличного представления и связать его с "tableHeaderView"... эта часть не является "волшебной".

Обратите внимание, что из-за "!" в объявлении вы должны помнить, что нужно перетащить ссылку на раскадровку, иначе вы получите ошибку во время тестирования, так что это хорошо.

Ответ 2

Пытаться:

tableView.tableHeaderView?.removeFromSuperview()
tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: CGFloat.leastNonzeroMagnitude))
tableView.layoutIfNeeded()

Установите UIView с высотой как CGFloat.leastNonzeroMagnitude вместо '0'. Это удалит пробел, появляющийся в верхней части после удаления tableViewHeader. Это сработало для меня.

Ответ 3

[self.tableView.tableHeaderView removeFromSuperview];
self.tableView.tableHeaderView = nil;
[self.tableView reloadData];

Ответ 4

//hidden sectionFooter

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

Ответ 5

removeFromSuperview или установить nil не работают, когда "reloadData"

self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 0.0f, 0.001f)];
[self.tableView reloadData];

Ответ 6

if tableView.tableHeaderView == nil{ 
tableView.tableHeaderView = self.headerHolder 
}
else
{
 tableView.tableHeaderView = nil 
}
}

Вы должны создать аутлет headerHolder и он должен быть сильным свойством. Если мы использовали слабое свойство для headerHolder, когда оно равно nil, оно освобождается, и вы не можете установить его снова в качестве заголовка

Ответ 7

Часто представление заголовка-призрака будет продолжать появляться после того, как представление заголовка было установлено с использованием "viewForHeaderInSection", а затем программно скрыто или имеет значение nil. Чтобы это полностью исчезло, установите sectionHeaderHeight = 0.

Цель C:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger) section
{
    if (self.viewMode == SectionHeaderShouldBeHidden)
    {
        tableView.sectionHeaderHeight = 0;
        return nil;
    }
    else if (self.viewMode == SectionHeaderShouldAppear)
    {
        //section text as a label
        UILabel *lbl = [[UILabel alloc] init];
        lbl.textAlignment = NSTextAlignmentCenter;
        lbl.font = [UIFont boldSystemFontOfSize:13];
        lbl.textColor = [UIColor whiteColor];
        [lbl setBackgroundColor:App.secondaryColor];
        tableView.sectionHeaderHeight = 20;

        if (self.queryResultsViewModel.items.count == 0)
            return lbl;

        lbl.text = @"Section Header Text";

        return lbl;
    }
}

Свифт 4+:

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

    if !self.viewMode == HeaderShouldBeShown
    {
        self.listView.sectionHeaderHeight = 0
        return nil
    }

    let lbl: UILabel = UILabel.init()
    lbl.textAlignment = NSTextAlignment.center
    lbl.font = UIFont.boldSystemFont(ofSize: 13)
    lbl.textColor = UIColor.white
    lbl.backgroundColor = UIColor.black
    tableView.sectionHeaderHeight = 20
    lbl.text = "Section Header Text"
    return lbl
}

Ответ 8

Если вы создали свое представление в раскадровке, вы можете временно скрыть его с помощью

tableView.tableHeaderView?.frame = CGRect.zero

Чтобы отобразить это снова, используйте

tableView.tableHeaderView?.frame = CGRect(x: 0, y: 0, width: tableView.frame.width, height: 50)