【问题标题】:can an NSLayoutConstraint be re-activated?可以重新激活 NSLayoutConstraint 吗?
【发布时间】:2016-06-27 17:08:06
【问题描述】:

我有一个用户可以扩展和收缩的结果容器。我想删除一个约束并添加一个新约束。单击它可以正常工作,但再次单击(即设置 newConstraint.active=false 和 resultTopConstraint=true 会导致它崩溃)。我有以下内容:

  @IBAction func toggleResultContainer(sender: AnyObject) {

    isResultsOpen = !isResultsOpen

    //resultTopConstraint.constant =  isResultsOpen ? -300.0 : 0.0

    self.view.sendSubviewToBack(searchView)

    let newConstraint = NSLayoutConstraint(
      item: resultsContainer,
      attribute: .Top,
      relatedBy: .Equal,
      toItem: resultsContainer.superview!,
      attribute: .Top,
      multiplier: 1.0,
      constant: 30.0
    )

    if(isResultsOpen){
      resultTopConstraint.active = false
      newConstraint.active = true
    }else{
      resultTopConstraint.active = true
      newConstraint.active = false
    }

    UIView.animateWithDuration(1.0, delay: 0.0, usingSpringWithDamping: 0.4, initialSpringVelocity: 10.0, options: .CurveEaseIn, animations: {
        self.view.layoutIfNeeded()
      }, completion: nil)

并获取Unable to simultaneously satisfy constraints.

上面的代码应该工作吗?这真的是一个同时满足约束的问题吗?我试过设置约束

  @IBOutlet var resultTopConstraint: NSLayoutConstraint!

weakstrong(根据https://stackoverflow.com/a/28717185/152825),但似乎没有效果。一个

【问题讨论】:

    标签: ios autolayout


    【解决方案1】:

    试试这个:

    if (isResultsOpen) {
          NSLayoutConstraint.deactivateConstraints([resultTopConstraint])
          NSLayoutConstraint.activateConstraints([newConstraint])
        } else {
          NSLayoutConstraint.deactivateConstraints([newConstraint])
          NSLayoutConstraint.activateConstraints([resultTopConstraint])
        }
    

    【讨论】:

    • thx - 似乎没有这样做(但一个很好的建议)。我有强烈的感觉,这是一个有效的约束冲突。我对自动布局没有那么丰富的经验,所以可能做错了什么。
    • 刚刚用另一个建议更新了我的答案,告诉我这是否有效
    • 我认为这行得通!我不得不把它们放在像NSLayoutConstraint.deactivateConstraints([resultTopConstraint]) 这样的数组中。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多