У меня есть, UIView
и я установил ограничения с помощью Xcode Interface Builder.
Теперь мне нужно программно обновить эту UIView's
константу высоты.
Есть такая функция myUIView.updateConstraints()
, но я не знаю, как ее использовать.
У меня есть, UIView
и я установил ограничения с помощью Xcode Interface Builder.
Теперь мне нужно программно обновить эту UIView's
константу высоты.
Есть такая функция myUIView.updateConstraints()
, но я не знаю, как ее использовать.
Ответы:
Выберите ограничение высоты в конструкторе интерфейсов и воспользуйтесь его выходом. Итак, если вы хотите изменить высоту представления, вы можете использовать приведенный ниже код.
yourHeightConstraintOutlet.constant = someValue
yourView.layoutIfNeeded()
Метод updateConstraints()
- это метод экземпляра UIView
. Это полезно при программной установке ограничений. Он обновляет ограничения для представления. Для более подробной информации щелкните здесь .
Если у вас есть представление с несколькими ограничениями, гораздо более простой способ без создания нескольких выходов:
В построителе интерфейса дайте каждому ограничению, которое вы хотите изменить, идентификатор:
Затем в коде вы можете изменить несколько ограничений следующим образом:
for constraint in self.view.constraints {
if constraint.identifier == "myConstraint" {
constraint.constant = 50
}
}
myView.layoutIfNeeded()
Вы можете дать нескольким ограничениям один и тот же идентификатор, что позволит вам группировать ограничения и изменять все сразу.
Изменить HeightConstraint
и WidthConstraint
не создавать IBOutlet
.
Примечание. Назначьте ограничение высоты или ширины в файле раскадровки или XIB. после получения этого ограничения с помощью этого расширения.
Вы можете использовать это расширение для получения ограничения высоты и ширины:
extension UIView {
var heightConstraint: NSLayoutConstraint? {
get {
return constraints.first(where: {
$0.firstAttribute == .height && $0.relation == .equal
})
}
set { setNeedsLayout() }
}
var widthConstraint: NSLayoutConstraint? {
get {
return constraints.first(where: {
$0.firstAttribute == .width && $0.relation == .equal
})
}
set { setNeedsLayout() }
}
}
Ты можешь использовать:
yourView.heightConstraint?.constant = newValue
first(where: ...)
который можно использовать сразу вместо filter
+first
Перетащите ограничение в свой 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()
}
}
Вы можете обновить ограничение с помощью плавной анимации, если хотите, см. Фрагмент кода ниже:
heightOrWidthConstraint.constant = 100
UIView.animate(withDuration: animateTime, animations:{
self.view.layoutIfNeeded()
})
Если описанный выше метод не работает, обязательно обновите его в блоке Dispatch.main.async {}. Тогда вам не нужно вызывать метод layoutIfNeeded ().
Сначала подключите ограничение высоты к нашему viewcontroller для создания 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
}
Чтобы обновить ограничение макета, вам нужно только обновить свойство константы и после этого вызвать layoutIfNeeded.
myConstraint.constant = newValue
myView.layoutIfNeeded()
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()
}