Ios 正在对不相关的视图对象调用addConstraint方法
我一直在网上阅读一些代码,下面是它的设置- 一个Ios 正在对不相关的视图对象调用addConstraint方法,ios,objective-c,nslayoutconstraint,Ios,Objective C,Nslayoutconstraint,我一直在网上阅读一些代码,下面是它的设置- 一个scrollContainerView作为我的视图中的子视图 scrollView作为scrollContainerView中的子视图 [self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|"options:0 metrics:nil views:viewDictionary]] 现在,按照视觉格式,scrollVi
scrollContainerView
作为我的视图中的子视图
scrollView
作为scrollContainerView
中的子视图
[self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|"options:0 metrics:nil views:viewDictionary]]
现在,按照视觉格式,scrollView
在其superview的顶部和底部边缘垂直固定,superview是scrollContainerView
[self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|"options:0 metrics:nil views:viewDictionary]]
QN 1-
我不明白为什么结果约束被添加到self.view
而不是scrollview
。当约束与要添加的约束不相关时,为什么将约束添加到self.view
QN 2-
假设我有一个名为viewOuter
的超级视图,其子视图名为viewInner
。那么——
[viewOuter addConstraint:[NSLayoutConstraint constraintWithItem:viewInner attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:viewOuter attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0.0]]
及
必须将约束添加到视图中,该视图是约束中涉及的所有视图的祖先,其中视图被视为自身的“祖先”。它们不必添加到最近的祖先,尽管这是最常见的方式
所以,对于你的第一个问题,这就是编写代码的人是如何决定这样做的。不清楚他们为什么做出这个决定
对于第二个问题,只允许使用第一种形式。第二个是无效的,因为接收者不是约束中涉及的所有视图的祖先
最后,我要说的是,在iOS 8.0或更高版本中,您只需在约束上设置active
属性,它就会自动在相关视图中添加或删除自身。类似地,您可以执行[NSLayoutConstraint activateConstraints:constraints]
和[NSLayoutConstraint DISACTIVATECONSTRAINTS:constraints]
以批量添加或删除约束,而无需确定应向哪些视图添加或从中删除约束