美文网首页
使用Masonry约束tableHeaderView,解决错位问

使用Masonry约束tableHeaderView,解决错位问

作者: 二斤寂寞 | 来源:发表于2019-07-22 19:28 被阅读0次
[self.tableView beginUpdates];
[self.tableView setTableHeaderView:myTableHeaderView];
[self.tableView endUpdates];
 
//下面这部分很关键,重新布局获取最新的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;

网上基本全是这一个回答,来回转载。
但是我自己的代码试了不行。

解决方案:

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

或者如参考iOS开发 masonry 设置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;

相关文章

网友评论

      本文标题:使用Masonry约束tableHeaderView,解决错位问

      本文链接:https://www.haomeiwen.com/subject/vvkglctx.html