Как установить высоту заголовка таблицы в UITableView? - PullRequest
65 голосов
/ 07 апреля 2011

Я просмотрел документы Apple по поводу класса UITableView и ссылки на делегат, но не смог найти способ явной установки высоты заголовка таблицы.

Я установил высоту ячейки таблицы, используя следующий делегат:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

и задайте высоту верхнего / нижнего колонтитула раздела с помощью следующих делегатов.

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

Может ли кто-нибудь помочь мне установить высоту верхнего / нижнего колонтитула таблицы?

Спасибо.

Ответы [ 15 ]

59 голосов
/ 07 апреля 2011

Просто установите свойство frame для tableHeaderView.

57 голосов
/ 28 сентября 2012

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

self.tableView.tableHeaderView = self.tableView.tableHeaderView;

Хитрость в том (я думаю), что UITableView кэширует высоту (собственно кадр), когда вы присваиваете представление свойству tableHeaderView.Приведенная выше строка просто снова назначает высоту.

33 голосов
/ 05 января 2016
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    sizeHeaderToFit()
}

private func sizeHeaderToFit() {
    let headerView = tableView.tableHeaderView!

    headerView.setNeedsLayout()
    headerView.layoutIfNeeded()

    let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
    var frame = headerView.frame
    frame.size.height = height
    headerView.frame = frame

    tableView.tableHeaderView = headerView
}

Более подробную информацию можно найти здесь

9 голосов
/ 17 сентября 2012

Если вам все еще это нужно, вы пытались установить свойство

self.tableView.tableHeaderView 

Если вы рассчитываете нужную высоту и устанавливаете новый вид для tableHeaderView:

CGRect frame = self.tableView.tableHeaderView.frame;
frame.size.height = newHeight;

self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:frame];

Это должно работать.

6 голосов
/ 11 сентября 2014

Это работает со мной, только если я установил нижний колонтитул / заголовок таблицы вначале равным 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;

Убедитесь, что self.footer является надежной ссылкой для предотвращения освобождения представления нижнего колонтитула

4 голосов
/ 28 ноября 2017

Swift 4 - вы можете управлять высотой с помощью HEIGHT_VIEW, просто добавьте этот код, он работает

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let HEIGHT_VIEW = 60
    tableView.tableFooterView?.frame.size = CGSize(width: tblView.frame.width, height: CGFloat(HEIGHT_VIEW))

    tableView.tableHeaderView?.frame.size = CGSize(width:tblView.frame.width, height: CGFloat(HEIGHT_VIEW))
}
2 голосов
/ 07 мая 2016

Просто создайте Footer Wrapper View, используя конструктор UIView(frame:_) затем, если вы используете xib-файл для FooterView, создайте представление из xib и добавьте как subView в представление-оболочку. затем присвойте оболочку 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, оно может не работать.

1 голос
/ 06 февраля 2019

Вы можете создать UIView с желаемой высотой (ширина должна соответствовать ширине UITableView), а внутри него вы можете разместить UIImageView с изображением соответствующих размеров: они не будут растягиваться автоматически.

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

Кроме того, вы можете назначить преобразование Трансляции, чтобы поместить изображение в середину контейнера.например, заголовок.

1 голос
/ 23 октября 2018

Если вы используете XIB для основного заголовка tableView, вы можете установить XIB в качестве произвольной формы, установить желаемую высоту и снять отметки с верхних, нижних блоков и верхних, нижних стрелок автоматического изменения размера. Будут выбраны только горизонтальные части.Я упоминал выше.

1 голос
/ 13 сентября 2017

Если добавить представление в качестве представления заголовка таблицы в IB, установите рамку этого представления в IB на вкладке 5 (инспектор размера)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...