Конфликт ограничений, потому что я не могу деактивировать ограничение - PullRequest
0 голосов
/ 24 марта 2020

У меня есть 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 голос
/ 24 марта 2020

У вас есть две опции:

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

enter image description here

Вместо создания ограничения в функции 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
}
0 голосов
/ 24 марта 2020

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

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

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

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