使用Masonry約束tableHeaderView,解決錯(cuò)位問(wèn)題

[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)上基本全是這一個(gè)回答,來(lái)回轉(zhuǎn)載。
但是我自己的代碼試了不行。

解決方案:

- (void)setHeaderView {
    self.tableView.tableHeaderView = self.headerView;
    [self.headerView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.mas_equalTo(self.tableView);
    }];
}

或者如參考iOS開(kāi)發(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;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容