Как установить высоту заголовка таблицы в UITableView?
Я прошел через Apple docs о классе UITableView и ссылке делегата, но не смог найти способ явно установить высоту заголовка таблицы.
Я установил высоту ячейки таблицы, используя следующие полномочия:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
и установите высоту верхнего / нижнего колонтитула раздела, используя следующие делегаты.
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
может ли кто-нибудь помочь мне установить высоту верхнего/нижнего колонтитула таблицы?
спасибо.
12 ответов:
Я нашел хороший Хак. Добавьте нижеприведенную строку после изменения свойства кадра
self.tableView.tableHeaderView = self.tableView.tableHeaderView;
трюк (я думаю), что UITableView кэширует высоту (кадр на самом деле), когда вы назначаете представление свойству tableHeaderView. Выше линия просто назначает высоту снова.
override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() sizeHeaderToFit() } func sizeHeaderToFit() { let headerView = tableView.tableHeaderView! headerView.setNeedsLayout() headerView.layoutIfNeeded() let height = headerView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height var frame = headerView.frame frame.size.height = height headerView.frame = frame tableView.tableHeaderView = headerView }
более подробную информацию можно найти здесь
В случае, если вы еще нужно, вы пытались установить свойство
self.tableView.tableHeaderView
Если вы рассчитаете высоту вам нужно, и установить новый вид для
tableHeaderView
:CGRect frame = self.tableView.tableHeaderView.frame; frame.size.height = newHeight; self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:frame];
Он должен работать.
Он работает со мной только в том случае, если я сначала установил нижний колонтитул/заголовок tableview в nil:
self.footer = self.searchTableView.tableFooterView; CGRect frame = self.footer.frame; frame.size.height = 200; self.footer.frame = frame; self.searchTableView.tableFooterView = nil; self.searchTableView.tableFooterView = self.footer;
убедитесь, что собственной.нижний колонтитул является сильной ссылкой, чтобы предотвратить вид нижнего колонтитула от освобождения
просто создайте вид оболочки нижнего колонтитула с помощью конструктора
UIView(frame:_)
затем, если вы используете xib-файл для просмотра нижнего колонтитула, создайте представление из xib и добавьте в качестве подвида в представление оболочки. затем назначьте оберткуtableView.tableFooterView = fixWrapper
.let fixWrapper = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 54)) // dont remove let footer = UIView.viewFromNib("YourViewXibFileName") as! YourViewClassName fixWrapper.addSubview(footer) tableView.tableFooterView = fixWrapper tableFootterCostView = footer
он отлично работает для меня! дело в том, чтобы создать нижний колонтитул с конструктором
(frame:_)
. Даже если вы создадите UIView () и назначите свойство frame, это может не сработать.
Swift 4-Вы можете управлять высотой с HEIGHT_VIEW, просто добавьте этот код, его рабочий
override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() let HEIGHT_VIEW = 60 tblView.tableFooterView?.frame.size = CGSize(width: tblView.frame.width, height: CGFloat(HEIGHT_VIEW)) tblView.tableHeaderView?.frame.size = CGSize(width:tblView.frame.width, height: CGFloat(HEIGHT_VIEW)) }
Если добавить представление в виде заголовка таблицы в IB, установите рамку этого представления в IB на вкладке 5 (инспектор размеров)
использовать табличное представление свойств по умолчанию :
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 35.0; }
спасибо
Если вы изменили высоту заголовка tableView, просто используйте этот код для обновления tableView:
Objc:
[tableView beginUpdates]; tableView.endUpdates()
Swift:
tableView.beginUpdates() tableView.endUpdates()
С Autolayout вы могли бы сделать что-то вроде:
tableView.sectionHeaderHeight = UITableViewAutomaticDimension tableView.estimatedSectionHeaderHeight = <your-header-height>
или если ваши заголовки имеют разную высоту, идти вперед и реализовать:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return <your-header-height> }