在不相关的视图对象上调用 addConstraint 方法
addConstraint method being called on unrelated view object
我一直在网上阅读一些代码,这就是它的设置方式 -
A scrollContainerView
作为我的 view
中的子视图。
A 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]]
必须将约束添加到一个视图,该视图是约束中涉及的所有视图的祖先,其中一个视图被认为是其自身的 "ancestor"。不必将它们添加到 最近的 祖先,尽管这是最常见的做法。
因此,对于您的第一个问题,这就是编写该代码的人决定这样做的方式。不清楚他们为什么做出那个决定。
对于你的第二个问题,只允许使用第一种形式。第二个无效,因为接收者不是约束中涉及的所有视图的祖先。
最后,我想说的是,在 iOS 8.0 或更高版本中,您只需在约束上设置 active
属性,它就会自动添加或删除自身相关观点。同样,您可以执行 [NSLayoutConstraint activateConstraints:constraints]
和 [NSLayoutConstraint deactivateConstraints:constraints]
来批量添加或删除约束,而不必弄清楚应该在哪些视图中添加或删除它们。
我一直在网上阅读一些代码,这就是它的设置方式 -
A scrollContainerView
作为我的 view
中的子视图。
A 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]]
必须将约束添加到一个视图,该视图是约束中涉及的所有视图的祖先,其中一个视图被认为是其自身的 "ancestor"。不必将它们添加到 最近的 祖先,尽管这是最常见的做法。
因此,对于您的第一个问题,这就是编写该代码的人决定这样做的方式。不清楚他们为什么做出那个决定。
对于你的第二个问题,只允许使用第一种形式。第二个无效,因为接收者不是约束中涉及的所有视图的祖先。
最后,我想说的是,在 iOS 8.0 或更高版本中,您只需在约束上设置 active
属性,它就会自动添加或删除自身相关观点。同样,您可以执行 [NSLayoutConstraint activateConstraints:constraints]
和 [NSLayoutConstraint deactivateConstraints:constraints]
来批量添加或删除约束,而不必弄清楚应该在哪些视图中添加或删除它们。