Ответ 1
Просто установите свойство frame tableHeaderView.
Я просмотрел документы Apple о классе UITableView и делегировал ссылку, но не смог найти способ явно установить высоту заголовка таблицы.
Я установил высоту ячейки таблицы, используя следующий делегат:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
и задайте высоту заголовка раздела/нижнего колонтитула, используя следующие делегаты.
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
Может ли кто-нибудь помочь мне установить высоту заголовка/нижнего колонтитула таблицы?
Спасибо.
Просто установите свойство frame tableHeaderView.
Я нашел хороший хак. Добавьте нижеприведенную строку после изменения самого кадра
self.tableView.tableHeaderView = self.tableView.tableHeaderView;
Трюк (я думаю), что UITableView кэширует высоту (фактический кадр), когда вы назначаете представление свойству tableHeaderView. Вышеприведенная строка просто назначает высоту снова.
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
}
Более подробную информацию можно найти здесь .
Если вам все еще нужно, попробуйте установить свойство
self.tableView.tableHeaderView
Если вы подсчитаете нужный вам уровень и установите новый вид для tableHeaderView
:
CGRect frame = self.tableView.tableHeaderView.frame;
frame.size.height = newHeight;
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:frame];
Он должен работать.
Он работает со мной только в том случае, если сначала установить нижний колонтитул/столбец таблицы 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 является сильной ссылкой для предотвращения освобождения представления нижнего колонтитула
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))
}
Просто создайте просмотрщик нижнего колонтитула с помощью конструктора 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() и назначаете свойство кадра, оно может не работать.
Если добавить представление в виде заголовка таблицы в IB, установите кадр этого представления в IB на вкладке 5 (инспектор размера)
Если вы используете XIB для основного заголовка tableView, вы можете установить XIB в качестве произвольной формы, установить желаемую высоту и отменить автоматическое изменение размера верхней, нижней блоков и верхней, нижней стрелок. Будут выбраны только горизонтальные части. Вертикальная будет отменена, как я уже упоминал выше.,
Вы можете создать UIView с желаемой высотой (ширина должна соответствовать ширине UITableView), а внутри него вы можете разместить UIImageView с изображением нужных размеров: они не будут растягиваться автоматически.
Вы также можете задать поле выше и ниже внутреннего UIImageView, увеличив высоту представления контейнера.
Кроме того, вы можете назначить преобразование трансляции, чтобы поместить изображение, например, в середину представления заголовка контейнера.
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
}
или вы можете использовать как это также
tableView.estimatedSectionHeaderHeight
В Xcode 10 вы можете установить верхний и нижний колонтитул высоты раздела на вкладке "Инспектор размеров"
Если вы программно установите 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
}
}
@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;
}
Использовать свойство представления табличного представления:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 35.0;
}
Спасибо
Если вы изменили высоту headerView 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>
}