在一个视图中,我正在插入一个新的 UIButton,因为我一直在使用 AutoLayout,所以我需要获取下面要插入按钮的视图的约束。如何以编程方式获取 NSLayoutConstraint,以便我可以删除旧的约束,然后创建新的约束。谢谢。
编辑:
参考图表,我需要在B1和B2之间插入B3,所以我需要删除B1和B2之间已经设置的固定空间约束,我需要将B3底部连接到B2的顶部,将B3的顶部连接到B1的底部。
在一个视图中,我正在插入一个新的 UIButton,因为我一直在使用 AutoLayout,所以我需要获取下面要插入按钮的视图的约束。如何以编程方式获取 NSLayoutConstraint,以便我可以删除旧的约束,然后创建新的约束。谢谢。
编辑:
参考图表,我需要在B1和B2之间插入B3,所以我需要删除B1和B2之间已经设置的固定空间约束,我需要将B3底部连接到B2的顶部,将B3的顶部连接到B1的底部。
我需要删除 B1 和 B2 之间已经设置的固定空间约束
您可以在视图约束中搜索,也可以保留对创建它时B1
的引用。NSLayoutConstraint
搜索约束B1
可能效率较低:所有关系约束(视图到另一个视图)都是封闭的superview
. 假设您有一个句柄B1
,您可以在其父视图中列出所有B1
约束,如下所示:
// Searching all relationship constraints involving b1
for item in self.view.constraints() {
if let constraint = item as? NSLayoutConstraint {
if let button = constraint.firstItem as? UIButton {
if button == b1 {
println("firstItem found: \(constraint)")
}
}
if let button = constraint.secondItem as? UIButton {
if button == b1 {
println("secondItem found: \(constraint)")
}
}
}
}
到目前为止,更简洁的方法是保留对NSLayoutConstraint
您以后要修改或删除的引用。要在 Storyboard 中执行此操作,请创建所需的约束。
然后将引用直接拖动到源文件中,以便稍后对其进行操作。
您可以关闭应用于视图的默认约束,如下所示。在您第一次以编程方式创建按钮时应用以下代码。
B1.translatesAutoresizingMaskIntoConstraints = NO;
B2.translatesAutoresizingMaskIntoConstraints = NO;
B3.translatesAutoresizingMaskIntoConstraints = NO;
将所有按钮添加到您的视图后,使用AddSubView
再次设置您的约束作为您的需要,例如下面的示例。
// Center the middle one vertically
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:B2 attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]];
希望它对您 有所 帮助