【发布时间】:2016-03-27 07:04:01
【问题描述】:
我尝试使用 constraintEqualToAnchor() 设置具有 AutoLayout 约束的视图:
override func viewDidLoad() {
super.viewDidLoad()
let myView = UIView()
myView.backgroundColor = UIColor.orangeColor()
myView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(myView)
myView.leftAnchor.constraintEqualToAnchor(view.leftAnchor).active = true
myView.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor).active = true
myView.topAnchor.constraintEqualToAnchor(view.topAnchor).active = true
myView.bottomAnchor.constraintEqualToAnchor(view.bottomAnchor).active = true
/******************************************/
/* I try to change one of the constraints */
/******************************************/
myView.leftAnchor.constraintEqualToAnchor(view.rightAnchor, constant: -100).active = true
}
在最后一行代码中,我尝试更改其中一个约束。我认为它会起作用,但它在控制台日志中给出了一些错误
"<NSLayoutConstraint:0x7fb53a5180d0 H:|-(0)-[UIView:0x7fb53a5190b0](LTR) (Names: '|':UIView:0x7fb53a519240 )>",
"<NSLayoutConstraint:0x7fb53a51f660 H:[UIView:0x7fb53a519240]-(-100)-[UIView:0x7fb53a5190b0](LTR)>",
"<NSLayoutConstraint:0x7fb53a711ee0 'UIView-Encapsulated-Layout-Width' H:[UIView:0x7fb53a519240(414)]>"
当使用constraintEqualToAnchor()? 时,在我设置它们之后更改约束的正确方法是什么?
【问题讨论】:
-
我想我可以先将
myView.leftAnchor.constraintEqualToAnchor(view.leftAnchor).active设置为false,然后再更改它(最后一行),但它仍然失败。我想我在这里有一些误解...... -
您是否尝试过保留对约束的引用,然后直接设置常量?您不能继续对视图应用新的约束,否则它将变得过度约束。
-
@LucasDerraugh 我不确定如何使用布局锚点。你能告诉我答案中的代码吗?
-
让我给你打一个。
-
@LucasDerraugh 是的,我以为我正在覆盖现有的约束,但我也发现我实际上是在添加新的约束。但是,问题是我不知道如何首先使用“布局锚”方法删除/停用现有约束。
标签: ios swift uiview autolayout nslayoutconstraint