Swift-以编程方式添加/删除特定视图的约束
我正在尝试使用一个信息视图,一旦点击信息按钮,它就会打开。见图: 我希望infoView与按下的按钮垂直对齐。 我收集了一个纽扣。 这是我的密码:Swift-以编程方式添加/删除特定视图的约束,swift,autolayout,constraints,Swift,Autolayout,Constraints,我正在尝试使用一个信息视图,一旦点击信息按钮,它就会打开。见图: 我希望infoView与按下的按钮垂直对齐。 我收集了一个纽扣。 这是我的密码: @IBOutlet var infoButtons: [UIButton]! @IBAction func infoButtonPressed(_ sender: UIButton) { var alignYConstraint = NSLayoutConstraint() switch sender.tag { case
@IBOutlet var infoButtons: [UIButton]!
@IBAction func infoButtonPressed(_ sender: UIButton) {
var alignYConstraint = NSLayoutConstraint()
switch sender.tag {
case 1:
alignYConstraint = NSLayoutConstraint(item: infoView, attribute: .centerY, relatedBy: .equal, toItem: infoButtons[0], attribute: .centerY, multiplier: 1.0, constant: 0)
NSLayoutConstraint.activate([alignYConstraint])
infoView.isHidden = false
infoView.textView.text = "Text goes here"
infoView.onClickCallback = {
self.infoView.isHidden = true
// self.infoView.removeFromSuperview()
NSLayoutConstraint.deactivate([alignYConstraint])
}
case 2:
alignYConstraint = NSLayoutConstraint(item: infoView, attribute: .centerY, relatedBy: .equal, toItem: infoButtons[1], attribute: .centerY, multiplier: 1.0, constant: 0)
NSLayoutConstraint.activate([alignYConstraint])
infoView.isHidden = false
infoView.textView.text = "Different text"
infoView.onClickCallback = {
self.infoView.isHidden = true
NSLayoutConstraint.deactivate([alignYConstraint])
}
....................
}
}
我有两个问题:
1) 如果单击“关闭”按钮,一切都会正常工作,但如果在关闭“信息视图”之前单击另一个“信息”按钮,则会出现冲突的约束,并且视图不会按要求对齐。我已尝试删除以前的约束。。。但显然我不能成功
2) 我试图关闭infoView,即使我点击infoView之外的任何地方,但这里也存在同样的问题:约束冲突,视图将无法与正确的按钮对齐
谢谢你的帮助。我通过添加数组解决了这个问题 我在类的开头初始化了一个数组(var constraint=NSLayoutConstraint),然后每次单击该数组中的约束时都将其添加。 每次单击按钮时,我都会检查数组是否为空。如果不是,我移除约束。代码如下:
if sender.tag == 1{
if constraint.count > 0 {
NSLayoutConstraint.deactivate(constraint)
constraint.removeAll()
}
let alignYConstraint = NSLayoutConstraint(item: infoView, attribute: .centerY, relatedBy: .equal, toItem: infoButtons[0], attribute: .centerY, multiplier: 1.0, constant: 0)
NSLayoutConstraint.activate([alignYConstraint])
constraint.append(alignYConstraint)
infoView.isHidden = false
infoView.textView.text = "Text goes here"
infoView.onClickCallback = {
self.infoView.isHidden = true
//self.infoView.removeFromSuperview()
NSLayoutConstraint.deactivate([alignYConstraint])
}
}else if sender.tag == 2 {
if constraint.count > 0 {
NSLayoutConstraint.deactivate(constraint)
constraint.removeAll()
}
.............