Конфликт ограничений, потому что я не могу деактивировать ограничение

У меня есть CollectionView, и я хочу изменить его высоту динамически с содержанием. Я получаю сообщение об ошибке, потому что установленное ограничение в раскадровке конфликтует с ограничением, установленным в моем коде:

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(myCollectionView)
    //other constraints of collectionView
    collHeight = myCollectionView.heightAnchor.constraint(equalToConstant: 276)
    collHeight!.isActive = true
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
       //other stuff
        collHeight!.constant = collectionView.contentSize.height
        view.layoutIfNeeded()
 }

Ошибка: https://pastebin.com/5yQh5hUP Я не могу удалить ограничение с Entf на нем. Он только устанавливает номер 0. Могу ли я деактивировать его программно?

Всего 2 ответа


У вас есть два варианта:

  1. Выберите конфликтующее ограничение и установите флажок «Удалить во время сборки».

введите описание изображения здесь

  1. Вместо того, чтобы создавать свое ограничение в функции viewDidLoad , вы можете сделать viewDidLoad ограничения и просто установить изменение его константы.

    @IBOutlet weak var collectionViewHeightConstraint: NSLayoutConstraint!
    
    override func viewDidLoad() {
       super.viewDidLoad()
       view.addSubview(myCollectionView)
       // Set the constant
       collectionViewHeightConstraint.constant = 276 // Change this as you wish
    }
    

Вы пытались удалить ограничения раскадровки или отключить их?

for constraint in self.view.constraints {  
   constraint.isActive = false
}

в то время как вы можете определить id для ваших ограничений и проверить его значение внутри цикла. На самом деле я не полностью осведомлен о ваших новых добавленных ограничениях, но вы можете изменить его константу или множитель

for constraint in self.view.constraints {
    if constraint.identifier == "xyz" {
        constraint.multiplier = 0.5
    }
}

Есть идеи?

10000