2015-04-06 2 views
1

Я хочу программно обновить ограничение в коде. Я добавил их в контроллер раскадровки. Я делаю IBOutlet для ограничения и подключаю его. Добавить значения в updateViewConstrains(), но он не работает:Как обновить ограничение программно?

func updateViewConstraints() { 
    centerYConstraint.constant = 60 

    super.updateViewConstraints() 
} 
+0

Показать код, что конкретно не работает? – Wain

+0

переопределение функ updateViewConstraints() { centerYConstraint.constant = 60 super.updateViewConstraints() } – Nik

ответ

1

Вы можете обновить constant свойство ограничения макета.

1

Попробуйте myConstraintOutlet.constant = newValue;

4

создать IBOutlet в файле viewController.h:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *nameButtonVerticalConstraint; 

теперь соединяют его с заинтересованными autolayout ограничения:

enter image description here

Теперь вы можете просто изменить ограничение например:

self.nameButtonVerticalConstraint.constant=25; 

И если вы хотите более плавные переходы, вы можете поместить его внутри блока анимации:

[UIView animateWithDuration:1.2 delay:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{ 
    self.nameButtonVerticalConstraint.constant=50; 
    [self.view layoutIfNeeded]; 
} completion:nil]; 

EDIT: вот выдержка из this статьи

Если другие ограничения будут затронуты в связи с обновлением к вышеуказанному ограничению также следует называть следующее:

[viewForUpdate setNeedsUpdateConstraints]; 

Теперь, оживите просмотр по вызову layoutIfNeeded внутри блока анимации.

+0

я попробовать то же самое, но не работает :( – Nik

+0

@Nik. Отредактированный ответ, пожалуйста, проверьте – ShahiM

Смежные вопросы