2016-06-27 3 views
0

У меня есть контейнер результатов, который пользователь может затратить и списать. Я хотел бы удалить ограничение и добавить новый. Нажатие на нее отлично работает, но щелкнув второй раз (т.е. установка newConstraint.active = false и resultTopConstraint = true приводит к сбою). У меня есть следующий:может быть активирована NSLayoutConstraint?

@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), но, кажется, не имеют эффекта.

ответ

1

Попробуйте это:

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

THX - это не похоже, чтобы сделать это (но большое предложение). У меня сильное чувство, что это действительный конфликт ограничений. Я не настолько опытен с автозапуском, поэтому, наверное, что-то не так. – timpone

+0

Только что обновил мой ответ с другим предложением, скажите, если это работает – Hazneliel

+0

Я думаю, что работает! Я должен был поместить их в массив, например 'NSLayoutConstraint.deactivateConstraints ([resultTopConstraint])'. thx – timpone

Смежные вопросы