Невозможно одновременно удовлетворить ограничения. Я не уверен, какой код вызывает конфликт - PullRequest
0 голосов
/ 07 мая 2020

У меня два взгляда. и они были созданы в раскадровке и имеют выходные переменные. (topView и bottomSecondview) Когда я включаю switchState, я хочу, чтобы отображался secondBottomView, а когда я включаю switchstate2, я бы хотел, чтобы появился topView. он работает хорошо, пока я не включу оба переключателя. как только я включаю оба переключателя (что означает, что должны отображаться оба представления), я вижу это в консоли: Невозможно одновременно удовлетворить ограничения. Я не уверен, в чем конфликт. Пожалуйста, помогите мне.

    if UserDefaults.standard.bool(forKey:"switchState") == true && UserDefaults.standard.bool(forKey: "switchState2") == false {
         topView.isHidden = true
        secondBottomView.isHidden = false
             secondBottomView.translatesAutoresizingMaskIntoConstraints = false
             secondBottomView.topAnchor.constraint(equalTo: self.myUIProgressView.bottomAnchor, constant: 11).isActive = true
             secondBottomView.leadingAnchor.constraint(equalTo: self.myUIProgressView.leadingAnchor, constant: 0).isActive = true
             secondBottomView.bottomAnchor.constraint(equalTo: self.bottomView.topAnchor, constant: -11).isActive = true
             secondBottomView.trailingAnchor.constraint(equalTo: self.myUIProgressView.trailingAnchor, constant: 0).isActive = true          
    }

    if UserDefaults.standard.bool(forKey: "switchState2")  == true && UserDefaults.standard.bool(forKey: "switchState") == false {
            secondBottomView.isHidden = true
           topView.isHidden = false
         topView.translatesAutoresizingMaskIntoConstraints = false
         topView.topAnchor.constraint(equalTo: myUIProgressView.bottomAnchor, constant: 111).isActive = true
         topView.bottomAnchor.constraint(equalTo: bottomView.topAnchor , constant: -11).isActive = true
         topView.leadingAnchor.constraint(equalTo: myUIProgressView.leadingAnchor, constant: 0).isActive = true
         topView.trailingAnchor.constraint(equalTo: myUIProgressView.trailingAnchor, constant: 0).isActive = true
                   }

if UserDefaults.standard.bool(forKey: "switchState") == true && UserDefaults.standard.bool(forKey: "switchState2") == true {
        topView.isHidden = false
        topView.translatesAutoresizingMaskIntoConstraints = false
        topView.topAnchor.constraint(equalTo: myUIProgressView.bottomAnchor, constant: 10).isActive = true
        topView.bottomAnchor.constraint(equalTo: secondBottomView.topAnchor, constant: -10).isActive = true
        topView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 10).isActive = true
        topView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -10).isActive = true
        topView.widthAnchor.constraint(equalTo: secondBottomView.widthAnchor, multiplier: 1).isActive = true
        topView.heightAnchor.constraint(equalTo: secondBottomView.heightAnchor, multiplier: 1).isActive = true

        secondBottomView.isHidden = false
        secondBottomView.translatesAutoresizingMaskIntoConstraints = false
        secondBottomView.bottomAnchor.constraint(equalTo: bottomView.topAnchor, constant:-10).isActive = true
        secondBottomView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 10).isActive = true
        secondBottomView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -10).isActive = true
        secondBottomView.widthAnchor.constraint(equalTo: topView.widthAnchor, multiplier: 1).isActive = true
        secondBottomView.heightAnchor.constraint(equalTo: topView.heightAnchor, multiplier: 1).isActive = true
      secondBottomView.topAnchor.constraint(equalTo: self.myUIProgressView.bottomAnchor, constant: 11).isActive = false       
    }

1 Ответ

2 голосов
/ 07 мая 2020

Оба topView и secondBottomView имеют topAnchor, установленное на bottomAnchor из progressView. Удалите ограничение topAnchor для secondBottomView.

Кажется, с вашими ограничениями довольно много проблем. Вам будет проще добиться чего-то подобного, используя UIStackView с автоматической компоновкой. Добавьте новый UIStackView с вертикальной осью под progressView. Добавьте topView и secondBottomView к UIStackView. При изменении состояния переключателя просто покажите или скройте topView или secondBottomView как

topView.isHidden = true; // Hides topView
secondBottomView.isHidden = true; // Hides secondBottomView

Таким образом, используя UIStackView, вам не придется заботиться обо всех этих ограничениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...