Как мы можем скрыть tableHeaderView и tableFooterView?
У меня есть две кнопки, которые я добавляю в один столбец таблицы и другой в заголовке таблицы, я знаю, как скрыть заголовок таблицы, используя этот код table.tableHeaderView.hidden = YES;
но проблема в том, что в верхней части таблицы все еще есть место. Это пространство равно размеру заголовка, но представление скрыто. У него все еще есть пространство. Как мы можем отключить заголовок таблицы, удалив это space.I надеюсь, что гениальные разработчики поймут мой вопрос. Пожалуйста, помогите мне.
Спасибо заранее.
Ответы
Ответ 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)