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