Как установить высоту заголовка таблицы в UITableView?

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

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

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

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

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

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

Спасибо.

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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
}

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

Ответ 4

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

self.tableView.tableHeaderView 

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

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

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

Он должен работать.

Ответ 5

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

Ответ 6

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))
}

Ответ 7

Просто создайте просмотрщик нижнего колонтитула с помощью конструктора 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() и назначаете свойство кадра, оно может не работать.

Ответ 8

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

Ответ 9

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

Ответ 10

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

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

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

Ответ 11

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
}

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

tableView.estimatedSectionHeaderHeight 

Ответ 12

В Xcode 10 вы можете установить верхний и нижний колонтитул высоты раздела на вкладке "Инспектор размеров"

Size Inspector header

Ответ 13

Если вы программно установите tableHeaderView, то просто установите его внутри viewDidLayoutSubviews.

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        setupTableViewHeader()
    }

    private func setupTableViewHeader() {
        // Something you do to set it up programatically...
        tableView.tableHeaderView = MyHeaderView.instanceFromNib() 
    }

Если вы не установили его программно, вам нужно сделать то же самое, что ответил @Kris, основываясь на этой ссылке

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        sizeHeaderToFit()
    }

    private func sizeHeaderToFit() {
        if let headerView = tableView.tableHeaderView {
            headerView.setNeedsLayout()
            headerView.layoutIfNeeded()

            let height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
            var frame = headerView.frame
            frame.size.height = height
            headerView.frame = frame

            tableView.tableHeaderView = headerView
        }
    }

Ответ 14

@kris ответ полезен для всех, кто хочет его в Objective-C.

Вот код

-(void)viewDidLayoutSubviews{
     [super viewDidLayoutSubviews];
     [self sizeHeaderToFit];
}

-(void)sizeHeaderToFit{
     UIView *headerView = self.tableView.tableHeaderView;
     [headerView setNeedsLayout];
     [headerView layoutIfNeeded];
     CGFloat height = [headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
     CGRect frame = headerView.frame;
     frame.size.height = height;
     headerView.frame = frame;
     self.tableView.tableHeaderView = headerView;
}

Ответ 15

Использовать свойство представления табличного представления:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 35.0;
}

Спасибо

Ответ 16

Если вы изменили высоту headerView tableView, просто используйте этот код для обновления tableView:

ObjC:

[tableView beginUpdates];
[tableView endUpdates];

Swift:

tableView.beginUpdates()
tableView.endUpdates()

Ответ 17

С autolayout вы можете сделать что-то вроде:

tableView.sectionHeaderHeight = UITableViewAutomaticDimension
tableView.estimatedSectionHeaderHeight = <your-header-height>

или если ваши заголовки имеют разную высоту, продолжайте и выполните:

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return <your-header-height>
}