Iphone tableHeaderView的自动布局

Iphone tableHeaderView的自动布局,iphone,ios,ipad,uitableview,ios6,Iphone,Ios,Ipad,Uitableview,Ios6,我一直试图通过学习自动布局来改进我的布局技术,但我偶然发现了一个我一直无法解决的问题 发生的情况如下:有一个视图控制器,其中包括一个UITableView和一个UIView。此视图位于表视图的正下方,其高度不会延伸到全屏高度(假设它占据了它的上半部分) 使用分组样式并放置在上述视图正上方的表视图具有半透明背景,因此您可以实际看到视图正下方的内容。但是,由于视图占据了屏幕的一半,我需要在这个表视图中添加一个tableHeaderView(也是半透明的),以便在首次加载视图控制器时,整个背景内容清晰

我一直试图通过学习自动布局来改进我的布局技术,但我偶然发现了一个我一直无法解决的问题

发生的情况如下:有一个视图控制器,其中包括一个
UITableView
和一个
UIView
。此视图位于表视图的正下方,其高度不会延伸到全屏高度(假设它占据了它的上半部分)

使用分组样式并放置在上述视图正上方的表视图具有半透明背景,因此您可以实际看到视图正下方的内容。但是,由于视图占据了屏幕的一半,我需要在这个表视图中添加一个tableHeaderView(也是半透明的),以便在首次加载视图控制器时,整个背景内容清晰可见

这样做的最终效果就像一个固定的tableHeaderView,当向上滚动表格视图时,它会消失在背景上

这是使用springs和struts以一种简单的方式完成的,但是每次我尝试将标题添加到表视图时(无论我如何操作),Auto Layout都会使应用程序崩溃

由于我正在寻找一种始终将背景中的视图高度(otherView)与tableHeaderView高度相匹配的方法,因此我使用:

[self.view addConstraint:[NSLayoutConstraints constraintWithItem:headerView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:otherView attribute:NSLayoutAttributeHeight multiplier: 1 constant:0]];
(我的理解是,约束不能直接添加到表视图,因为otherView不是它的子视图)

而且:

[headerView setTranslatesAutoResizingMaskIntoConstraints:NO]
这些调用总是导致此崩溃:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UITableView's implementation of -layoutSubviews needs to call super.'
那么有没有办法做到这一点?是否可以使用自动布局将tableHeaderView高度实际绑定到视图上的另一个元素


我还应该注意到,我早就离开IB了,所以这一切都是在代码中完成的,特别是在
loadView

上,如果您为NSLayoutConstraint创建一个实例变量并将其设置为:

headerViewHeightConstraint = [NSLayoutConstraint constraintWithItem:headerView
                                                          attribute:NSLayoutAttributeHeight
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:nil
                                                          attribute:NSLayoutAttributeNotAnAttribute
                                                         multiplier:1.0f
                                                           constant:otherView.frame.size.height];
您可以通过以下方式调整其大小:

headerViewHeightConstraint.constant = 1000.0f;
[headerView updateConstraintsIfNeeded];

请记住,
addConstraint:
addConstraint:
不是一回事

addConstraints
与约束数组或
[NSLayoutConstraints constraints WithVisualFormat:…]一起使用。

addConstraint:
与上面的示例中的单个约束一起使用


如果要覆盖
布局子视图:
在第一行调用
[super layoutSubviews]
。这将强制视图及其子视图自行布局,以便您可以访问其框架细节等。

David,感谢您的输入。我的错误在于addConstraint/addConstraint混淆。这是我原来问题上的一个拼写错误。我已经修好了。无论如何,根据您的建议:无论何时调用[self.view addConstraint:headerviewheightcstraint],我仍然会遇到相同的崩溃;无论我是在loadView、LayoutSubView还是在其他方法上执行此操作。在我看来,表视图实际上是在抱怨向其任何子视图添加约束。哦,您是在向表视图添加约束吗?那感觉有点像是拒绝。是的,那也是我的猜测。我接受你的回答是因为这个评论。不幸的是,到目前为止,似乎真的不可能使用自动布局来创建UITableView子视图。谢谢你的帮助,大卫。