Как установить высоту заголовка таблицы в 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 61

12 ответов:

просто установите свойство frame объекта tableHeaderView.

Я нашел хороший Хак. Добавьте нижеприведенную строку после изменения свойства кадра

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>
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
}

или вы можете использовать так же

tableView.estimatedSectionHeaderHeight