Как программно обновить ограничение постоянной высоты UIView?
У меня есть UIView
и я устанавливаю ограничения, используя Xcode Interface Builder.
Теперь мне нужно обновить UIView's
высоты UIView's
программным UIView's
.
Есть функция, похожая на myUIView.updateConstraints()
, но я не знаю, как ее использовать.
Ответы
Ответ 1
Выберите ограничение высоты из построителя интерфейса и выберите его. Итак, когда вы хотите изменить высоту представления, вы можете использовать приведенный ниже код.
yourHeightConstraintOutlet.constant = someValue
yourView.layoutIfNeeded()
Метод updateConstraints()
- это метод экземпляра UIView
. Это полезно при программном программировании ограничений. Он обновляет ограничения для представления. Для более подробной информации нажмите здесь.
Ответ 2
Если у вас есть представление с несколькими ограничениями, гораздо проще, не создавая несколько розеток:
В построителе интерфейсов укажите каждое ограничение, которое вы хотите изменить идентификатор:
![введите описание изображения здесь]()
Затем в коде вы можете изменить несколько ограничений следующим образом:
for constraint in self.view.constraints {
if constraint.identifier == "myConstraint" {
constraint.constant = 50
}
}
myView.layoutIfNeeded()
Вы можете предоставить несколько ограничений одному и тому же идентификатору, что позволяет группировать вместе ограничения и изменять все сразу.
Ответ 3
Измените HeightConstraint
и WidthConstraint
без создания IBOutlet
.
Примечание. Назначьте ограничение высоты или ширины в раскадровке или в файле XIB. после получения этого ограничения с помощью этого расширения.
Вы можете использовать это расширение, чтобы получить ограничение высоты и ширины.
extension UIView {
var heightConstaint: NSLayoutConstraint? {
get {
return constraints.first(where: {
$0.firstAttribute == .height && $0.relation == .equal
})
}
set { setNeedsLayout() }
}
var widthConstaint: NSLayoutConstraint? {
get {
return constraints.first(where: {
$0.firstAttribute == .width && $0.relation == .equal
})
}
set { setNeedsLayout() }
}
}
Вы можете использовать
yourView.heightConstaint?.constant = newValue
Ответ 4
Перетащите ограничение в свой VC как IBOutlet. Затем вы можете изменить соответствующее значение (и другие свойства; проверьте документацию):
@IBOutlet myConstraint : NSLayoutConstraint!
@IBOutlet myView : UIView!
func updateConstraints() {
// You should handle UI updates on the main queue, whenever possible
DispatchQueue.main.async {
self.myConstraint.constant = 10
self.myView.layoutIfNeeded()
}
}
Ответ 5
Вы можете обновить ограничение с помощью плавной анимации, если хотите, см. Фрагмент кода ниже:
heightOrWidthConstraint.constant = 100
UIView.animate(withDuration: animateTime, animations:{
self.view.layoutIfNeeded()
})
Ответ 6
Сначала подключите ограничение Height к нашему диспетчеру просмотра для создания IBOutlet, как показано ниже.
@IBOutlet weak var select_dateHeight: NSLayoutConstraint!
тогда помещенный ниже код в действии загрузил или внутри любых действий
self.select_dateHeight.constant = 0 // we can change the height value
если он находится нажатием кнопки
@IBAction func Feedback_button(_ sender: Any) {
self.select_dateHeight.constant = 0
}
Ответ 7
Если вышеуказанный метод не работает, убедитесь, что вы его обновили в разделе Dispatch.main.async {}. Вам не нужно вызывать метод layoutIfNeeded().
Ответ 8
Чтобы обновить ограничение макета, вам нужно только обновить свойство константы и вызвать layoutIfNeeded после.
myConstraint.constant = newValue
myView.layoutIfNeeded()
Ответ 9
Create an IBOutlet of NSLayoutConstraint of yourView and update the constant value accordingly the condition specifies.
//Connect them from Interface
@IBOutlet viewHeight: NSLayoutConstraint!
@IBOutlet view: UIView!
private func updateViewHeight(height:Int){
guard let aView = view, aViewHeight = viewHeight else{
return
}
aViewHeight.constant = height
aView.layoutIfNeeded()
}