将约束添加到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我所期望的)
在一个3.5英寸的屏幕上,红色的背景(应用在笔尖上,延伸到一定的高度,即使我把高度设置为117.0f,tableHeaderView里面的UI元素正确显示)
底部的蓝线是分隔线,蓝色边框是在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