我想使用情节提要获得所有已应用约束的参考,而没有任何参考:
我尝试了很多方法,但是找不到确切的解决方案:
我的方法如下:
if let constraint = (self.constraints.filter{$0.firstAttribute == .height}.first) {
}
使用上述方法,我只能找出高度。
if let topConstraint = (self.constraints.filter{$0.firstAttribute == .top}.first) {
topConstraint.constant = 150//topMargin
}
if let leadingConstraint = (self.constraints.filter{$0.firstAttribute == .leading}.first) {
leadingConstraint.constant = 60 //leadingMargin
}
对于topConstraint和LeadingConstraint,我的得分为零。
self.constraints
self.constraints仅给出一个高度参考,即使我在同一视图上应用了前,尾和底约束。
注意:我不想从情节提要中获取参考,因此请不要提出该解决方案的建议。我要动态引用。
我正在寻找类似以下的方法:
if let topConstraint = (self.constraints.filter{$0.firstAttribute == .top}.first) {
topConstraint.constant = 150//topMargin
}
if let leadingConstraint = (self.constraints.filter{$0.firstAttribute == .leading}.first) {
leadingConstraint.constant = 60 //leadingMargin
}
if let trailingConstraint = (self.constraints.filter{$0.firstAttribute == .trailing}.first) {
trailingConstraint.constant = 70//leadingMargin
}
if let bottomConstraint = (self.constraints.filter{$0.firstAttribute == .bottom}.first) {
bottomConstraint.constant = 150//49 + bottomMargin
}
但是不幸的是,以上一项对我不起作用:(
答案 0 :(得分:0)
对于单个视图,您可以轻松获得与之相关的所有约束
for constraint in view.constraints {
print(constraint.constant)
}
对于特定视图的所有子视图,您都可以像这样
func getAllTheConstraintConstantsFor(view:UIView) {
for constraint in view.constraints {
print(constraint.constant)
}
for subview in view.subviews {
self.getAllTheConstraintConstantsFor(view: subview)
}
}
在这里您可以通过self.view,您将获得所有约束。
答案 1 :(得分:0)
参考this答案
对于像UIButton
这样的视图,您可以使用此代码找到top
约束。
extension UIButton {
func findTopConstraint() -> NSLayoutConstraint? {
for constraint in (self.superview?.constraints)! {
if isTopConstraint(constraint: constraint) {
return constraint
}
}
return nil
}
func isTopConstraint(constraint: NSLayoutConstraint) -> Bool {
return (firstItemMatchesTopConstraint(constraint: constraint) || secondItemMatchesTopConstraint(constraint: constraint))
}
func firstItemMatchesTopConstraint(constraint: NSLayoutConstraint) -> Bool {
return (constraint.firstItem as? UIButton == self && constraint.firstAttribute == .top )
}
func secondItemMatchesTopConstraint(constraint: NSLayoutConstraint) -> Bool {
return (constraint.secondItem as? UIButton == self && constraint.secondAttribute == .top)
}
}
要在top
上获得UIButton
约束,只需使用以下代码
button.findTopConstraint()!
类似地,您可以在任何视图上找到任何约束。
注意:您需要自己管理nil
的情况。