UITabelView有两个属性,是tableFooterView和tableHeaderView,这里面分别可以添加一个view,自动添加在tableview的头部和尾部。
self.tableView.tableFooterView = self.footerView;
我在这自定义了一个footerView属性,是uiview的子类,当我们赋值的时候,就需要footerView有自己的frame,一般我们自适应会用到masonry框架,masonry在make 约束的时候要求先添加控件,再添加约束,这里和tableview的footerView和headerView添加正好相反,所以有一些坑。
这里我们可以先添加约束,完成后再次设置tableview的tablefooterView属性,由于添加约束默认不是立即生效,所以我们这需要用到layoutIfNeeded属性,然后再添加。
[self.tableHeaderView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self.addressView);
}];
[self.tableHeaderView layoutIfNeeded];
self.tableView.tableHeaderView = self.tableHeaderView;
我这里在其他约束里已经把tableHeaderView的约束添加好了,所以这里面添加的比较少,大家根据自己需求。这样就可以把headerView添加。
上面的方法只是适用于tableview的添加,因为如果你添加的footerview一般都是独立的父控件,所以layoutIfNeed会把你的位置设置到页面的顶端
self.tableView.tableFooterView = self.tableFooterView;
CGSize size = [self.tableFooterView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
self.tableFooterView.frame = CGRectMake(0, 0, size.width, size.height);
self.tableView.tableFooterView = self.tableFooterView;
我们可以通过上面的方法获取footerView的size,然后赋值frame,再添加到tableFootView上,这里需要注意一下,tableFooterView这个视图不能用masonry设置,需要把其他视图添加到tableFooterView中,在其他视图中用masonry设置约束,然后调用上述代码,不然的话tableFooterView依旧会设置在顶端