У меня есть наследник UIView и установить ограничения с помощью Xcode построитель интерфейса.
Теперь мне нужно обновить, что ему UIView'ы` высота постоянное программно.
Есть функция, которая идет как `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 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
Перетащите ограничения на ваш ВК как 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()
})
Сначала подключите Высота ограничений в файле 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() метод.
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()
}
Чтобы обновить ограничения макета необходимо только обновить свойства константы и вызов layoutIfNeeded после.
myConstraint.constant = newValue
myView.layoutIfNeeded()