[self.tableView beginUpdates];
[self.tableView setTableHeaderView:myTableHeaderView];
[self.tableView endUpdates];
//下面這部分很關(guān)鍵,重新布局獲取最新的frame,然后賦值給myTableHeaderView
[myTableHeaderView setNeedsLayout];
[myTableHeaderView layoutIfNeeded];
CGSize size = [myTableHeaderView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
CGRect headerFrame = myTableHeaderView.frame;
headerFrame.size.height = size.height;
myTableHeaderView.frame = headerFrame;
self.tableView.tableHeaderView = myTableHeaderView;
網(wǎng)上基本全是這一個回答,來回轉(zhuǎn)載。
但是我自己的代碼試了不行。
解決方案:
- (void)setHeaderView {
self.tableView.tableHeaderView = self.headerView;
[self.headerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.tableView);
}];
}
或者如參考iOS開發(fā) masonry 設(shè)置tableHeadView中所述:包一層view效果一樣叼架。
UIView *headView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
ContainerView *con = [[ContainerView alloc] init];
con.backgroundColor = [UIColor blackColor];
[headView addSubview:con];
[con mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(headView);
}];
CGFloat height = [headView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
CGRect frame = headView.frame;
frame.size.height = height;
headView.frame = frame;
tableView.tableHeaderView = headView;