我们在一个用autoLayout 布局的页面中 增加一个TableView 我们为这个TableView增加一个固定高度为150px 的tableHeaderView 所以我们 这样设置
- (void)viewDidLoad {
[super viewDidLoad];
_headerView = [[[NSBundle mainBundle]loadNibNamed:@"HeaderView" owner:self options:nil] firstObject];
_headerView.frame = CGRectMake(0, 0, ScreenWidth, 150);
self.tableVIew.tableHeaderView = _headerView;
}
我们运行结果显示
我们看见 tableHeaderView 和我们tableview的第一个Cell重合 在不同尺寸的 屏幕上 都会有问题 原因是我们在 viewDidLoad中设定了 headerView的高度 此时程序还没有进行 自动布局 导致我们设定的 参数失效 接下来 我们把 设置方法放在
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
_headerView = [[[NSBundle mainBundle]loadNibNamed:@"HeaderView" owner:self options:nil] firstObject];
_headerView.frame = CGRectMake(0, 0, ScreenWidth, 150);
self.tableVIew.tableHeaderView = _headerView;
}
我们看见 运行结果正常 但是屏幕开始会有闪动 是因为 viewDidAppear的执行时机是在 页面完全显示之后 这怎么办?
我们的解决方法是在 重写HeaderView中的
- (void)layoutSubviews
{
//TODO:在这里设定 高度
self.frame = CGRectMake(0, 0, ScreenWidth, 150);
}
我们重新运行 发现正常显示
代码下载 https://github.com/wuningAlen/autolayoutForTableHeaderView.git
查阅相关资料 http://www.cnblogs.com/binglin92/p/4993561.html
http://stackoverflow.com/questions/28079591/using-autolayout-in-a-tableheaderview