我一直在网上阅读一些代码,这就是它的设置 -
scrollContainerView
作为view
内的子视图。
scrollView
作为scrollContainerView
内的子视图。
[self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|"options:0 metrics:nil views:viewDictionary]]
现在按照视觉格式,scrollView
正在垂直固定在其超视图的顶部和底部边缘,超级视图为scrollContainerView
。
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]]
和
[viewInner addConstraint:[NSLayoutConstraint constraintWithItem:viewInner attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:viewOuter attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0.0]]
答案 0 :(得分:1)
必须将约束添加到视图中,该视图是约束中涉及的所有视图的祖先,其中视图被视为"祖先"本身。他们不必被添加到最近的祖先,尽管这是最常见的。
因此,对于您的第一个问题,编写该代码的人决定如何做到这一点。不清楚为什么他们做出了这个决定。
对于第二个问题,只允许使用第一个表格。第二个是无效的,因为接收者不是约束中涉及的所有视图的祖先。
最后,我要说的是,在iOS 8.0或更高版本中,您只需在约束上设置active
属性,它就会自动在相关视图中添加或删除自身。同样,您可以[NSLayoutConstraint activateConstraints:constraints]
和[NSLayoutConstraint deactivateConstraints:constraints]
批量添加或删除约束,而无需弄清楚应添加或删除哪些视图。