用于设置自动布局约束的 iOS 视图层次结构
Posted
技术标签:
【中文标题】用于设置自动布局约束的 iOS 视图层次结构【英文标题】:iOS View Hierarchy for setting up Auto Layout Constraint 【发布时间】:2013-01-19 11:49:45 【问题描述】:视图控制器中与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];
但两次我都收到错误消息,“约束是否引用了视图子树之外的内容?这是非法的。”
有人可以解释视图控制器相对于导航控制器的视图层次结构吗?
谢谢!
【问题讨论】:
您是否有理由不能在视图顶部和搜索栏顶部之间进行约束?视图的顶部应该在导航栏的底部,这样就可以得到你想要的。 【参考方案1】:视图树如下所示:
因此,navigationController.view 是导航栏和您的视图最接近的祖先。我不确定为什么那不起作用。你把那个代码放在哪里了?
【讨论】:
我认为您评论中的建议可能是这里的方法。搜索栏应该固定在其超级视图的顶部。 谢谢!我最终在上面的评论中接受了你的建议,效果很好 @rdelmar 嗨,但是如果 NavigationBar 是半透明的,我该如何让它工作?在这种情况下,将此约束添加到 self.view 将隐藏导航栏下方的搜索栏吗?以上是关于用于设置自动布局约束的 iOS 视图层次结构的主要内容,如果未能解决你的问题,请参考以下文章
错误:线程 1:“无法设置未准备好约束的视图层次结构的布局。”使用自动布局时