Я использую автоматический макет для своего tableView, и для каждой ячейки в нем я программно создаю некоторые ограничения.

Чтобы не удалять ВСЕ ограничения каждый раз, я хотел бы знать, есть ли способ выполнить цикл view.constraints(), и если есть ограничение, такое как H:|-view-|, я удаляю его.

Является ли это возможным?

5
Nico 9 Апр 2015 в 11:49
Вы можете уточнить? Чего вы пытаетесь достичь? Я уверен, что есть лучшее решение вашей проблемы без необходимости проверять, существует ли ограничение.
 – 
oren
9 Апр 2015 в 12:46
Были некоторые ограничения, которые на самом деле были добавлены маской автоматического изменения размера, но на самом деле я нашел другой способ.
 – 
Nico
14 Апр 2015 в 08:08
Вы можете присвоить идентификатор каждому любому ограничению, чтобы вы могли получить конкретное ограничение, когда захотите. developer.apple.com/documentation/uikit/nslayoutconstraint/…
 – 
Chirag Shah
25 Июл 2018 в 10:51

3 ответа

Лучший ответ

Вам нужно будет использовать переменные (или массив) для удержания тех ограничений, которые соответствуют тому, что вы хотите, а затем зациклить view.constraints (), чтобы удалить их. Когда вы используете визуальный формат, все, что вы создаете, преобразуется в несколько ограничений.

Другой метод, который можно использовать, - это пройти через ограничения и проверить свойства ограничения, такие как firstItem и secondItem, Relationship и т. Д., Чтобы они соответствовали тому, что вы хотите.

5
Schemetrical 26 Июл 2018 в 01:55

Вот как я проверил, есть ли у элемента управления ограничение по ширине или высоте (Swift 5.1):

debugPrint(btn.constraints.contains(where: { (item) -> Bool in
    return item.firstAttribute.rawValue == NSLayoutConstraint.Attribute.width.rawValue;
    }))
debugPrint(btn.constraints.contains(where: { (item) -> Bool in
    return item.firstAttribute.rawValue == NSLayoutConstraint.Attribute.height.rawValue;
    }))
1
Mostafa Al Belliehy 6 Мар 2020 в 19:02

Нет необходимости зацикливать ограничения. Это должно работать:

toRemove = NSLayoutConstraint.constraints(withVisualFormat: "H:|-view-|",
                                                       options: [],
                                                       metrics: nil,
                                                         views: ["view": yourView])
viewWithConstraints.removeConstraints(toRemove)
0
budiDino 25 Июл 2018 в 10:37