Я использую автоматический макет для своего tableView, и для каждой ячейки в нем я программно создаю некоторые ограничения.
Чтобы не удалять ВСЕ ограничения каждый раз, я хотел бы знать, есть ли способ выполнить цикл view.constraints()
, и если есть ограничение, такое как H:|-view-|
, я удаляю его.
Является ли это возможным?
3 ответа
Вам нужно будет использовать переменные (или массив) для удержания тех ограничений, которые соответствуют тому, что вы хотите, а затем зациклить view.constraints (), чтобы удалить их. Когда вы используете визуальный формат, все, что вы создаете, преобразуется в несколько ограничений.
Другой метод, который можно использовать, - это пройти через ограничения и проверить свойства ограничения, такие как firstItem и secondItem, Relationship и т. Д., Чтобы они соответствовали тому, что вы хотите.
Вот как я проверил, есть ли у элемента управления ограничение по ширине или высоте (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;
}))
Нет необходимости зацикливать ограничения. Это должно работать:
toRemove = NSLayoutConstraint.constraints(withVisualFormat: "H:|-view-|",
options: [],
metrics: nil,
views: ["view": yourView])
viewWithConstraints.removeConstraints(toRemove)
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.