2013-04-21 70 views
0

Okey所以这是我的两难境地atm。iOS UITableView覆盖自动布局约束setTableHeaderView后

我有一个UITableView(tableView)和UIView(viewForTableHeader)包含像UIImag标签等其他对象的故事板。

编程方式我设置了UIView是UITableView中的头做:

[self.tableView setTableHeaderView:self.viewForTableHeader]; 

这工作完全不使用自动布局时。

但随着自动布局应用程序崩溃,并给我留下了:

终止应用程序由于未捕获的异常“NSInternalInconsistencyException”,理由是:“自动布局仍在执行-layoutSubviews后需要。 UITableView的-layoutSubviews实现需要调用super。'

所以在viewDidLoad中我试图设置viewForTableHeader的约束条件是:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self.viewForTableHeader attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.tableView attribute:NSLayoutAttributeTop multiplier:0 constant:0]; 
[self.view addConstraint:constraint]; 
constraint = [NSLayoutConstraint constraintWithItem:self.viewForTableHeader attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.tableView attribute:NSLayoutAttributeLeft multiplier:0 constant:0]; 
[self.view addConstraint:constraint]; 

,我也试过:

- (void)layoutSublayersOfLayer:(CALayer *)layer { 
    [super layoutSublayersOfLayer:self.tableView.layer]; 

,做同样的事情,试图设置的限制这里

} 

它是否更好将viewForTableHeader置于nib文件中? 我有点不喜欢这个如此真实的任何帮助或指针会有帮助。

回答

1

既然你在IB中都有(tableView和headerView),你可以将拖动到 viewForTableHeader到(over)tableView并将其设置为表头。

这将使headerView出现在以下的的表视图在意见层次结构

如果你这样做,你可以在运行期间稍后删除/添加此视图到表中,而不会出现自动布局错误或额外约束。

[self.viewForTableHeader removeFromSuperview]; 

后来

[self.tableView setTableHeaderView:self.viewForTableHeader]; 
+0

哦,听起来都那么容易:) 所以,我照你说的和draged的viewForTableHeader过的tableView是的,这就是所有我不得不这样做。 *叹息* 我真的过度劳累我的屁股在这一个。 非常感谢Mariam N! – Pedroinpeace 2013-04-21 19:57:15