用于设置自动布局约束的iOS视图层次结构

时间:2013-01-19 11:49:46

标签: ios objective-c autolayout nslayoutconstraint

视图控制器中self.navigationController.navigationBar的最近祖先和self.view的子视图是什么,所以我可以将约束添加到该祖先?

self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
[self.searchBar setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:self.searchBar];

NSLayoutConstraint* cn = [NSLayoutConstraint constraintWithItem:self.searchBar  
attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual 
toItem:self.navigationController.navigationBar attribute:NSLayoutAttributeBottom 
multiplier:1.0 constant:0];

我试过

[self.view addConstraint:cn];
[self.navigationController.view addConstraint:cn];

但两次我都收到错误,“约束是否引用了视图子树之外的内容?这是非法的。”

有人可以解释与navigationController相关的视图控制器的视图层次结构吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

视图树如下所示:

enter image description here

因此,navigationController.view是导航栏和视图的最近祖先。我不确定为什么那不起作用。你把代码放在哪里了?