将约束添加到UITableVIew标题视图

所以我是新来的约束。

我有一个包含多个视图作为兄弟的nib文件。 ViewController的视图包含一个tableView,我有另一个视图将被添加到tableHeaderView(我们称之为self.tableHeaderView)。

我面临的问题是,我想根据一定的条件来调整self.tableHeaderView的大小。 我已经为所有的UI元素添加了约束条件,无论如何,我无法通过nib向self.tableHeaderView添加高度约束。

我尝试以编程方式更改self.tableHeaderView的框架,但是当我在模拟器中运行代码时没有任何效果,这是有道理的,因为如果我使用自动布局,它应该忽略框架更改。

我尝试以编程方式添加高度约束,但它崩溃。

这是我要添加高度约束的代码片段。

[self.tableHeaderView addConstraint:[NSLayoutConstraint constraintWithItem:self.tableHeaderView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:107.0f]]; 

我得到的exception:***声明失败 – [UITableView layoutSublayersOfLayer:],/ SourceCache /UIKit_Sim/UIKit-2903.2/UIView.m:8536


*由于未捕获的exception“NSInternalInconsistencyException”而终止应用程序,原因是:执行-layoutSubviews之后仍然需要自动布局。 UITableView的-layoutSubviews实现需要调用super。'*

最坏的情况下,我会添加另一个高度的同级视图,并复制UI元素,但我想避免这种情况。

笔尖文件结构

编辑1:我得到这个exception,当我有这个self.topicHeaderView.translatesAutoresizingMaskIntoConstraints = NO;

如果我没有它,我得到这个

无法同时满足约束。 下面列表中的至less一个约束可能是你不想要的。 试试这个:(1)看看每一个约束,并试图找出你不期望的; (2)find添加不需要的约束或约束的代码并修复它。 (注意:如果你看到你不明白的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性的文档translatesAutoresizingMaskIntoConstraints)(“”,“”)

将尝试通过打破约束来恢复

在objc_exception_throw上中断,在debugging器中捕获它。 列出的UIView的UIConstraintBasedLayoutDebugging类中的方法也可能有所帮助。

编辑:2在4“的屏幕上,它看起来很好(红色的背景覆盖整个tableHeaderView我所期望的) 4“模拟器

在一个3.5英寸的屏幕上,红色的背景(应用在笔尖上,延伸到一定的高度,即使我把高度设置为117.0f,tableHeaderView里面的UI元素正确显示)

3.5“屏幕

底部的蓝线是分隔线,蓝色边框是在tableHeaderView的周围。

将视图作为页眉或页脚添加到表视图时,不能在此视图上使用约束,而只能在其中使用约束。 此外,视图必须位于层次结构的顶部(如您所见),如果将其作为子视图移至另一个视图,则会出现相同的错误。

您可以通过设置改变高度的相同框架直接在代码中更改视图的高度。 这工作正常。

另外请记住,只有在重新分配标题之后,此更改才会生效。

 tableView.tableHeaderView.frame = ...; tableView.tableHeaderView = tableView.tableHeaderView; 

我有同样的问题,我不能在tableHeaderView使用约束。

然后我创build了另一个子视图来创build约束。

 // 1 - create a header view and a subHeaderView UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, bounds.size.width, bounds.size.height - 64.f)]; headerView.backgroundColor = [UIColor blackColor]; tableView.tableHeaderView = headerView; UIView *subHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, bounds.size.width, bounds.size.height - 64.f)]; [headerView addSubview:subHeaderView]; // 2 - add constrainedView to subHeaderView (Eg) UIView *constrainedView = [UIView new]; [constrainedView setTranslatesAutoresizingMaskIntoConstraints:NO]; [subHeaderView addSubView:constrainedView]; // 3 - addConstraints of subviews into subHeaderView (Eg) [subHeaderView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[constrainedView]|" options:0 metrics:metrics views:views]]; [subHeaderView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[constrainedView]|" options:0 metrics:metrics views:views]]; 

这是我的项目,iOS 7.0 / Xcode 5.0.2