Как отредактировать ограничение в коде

У меня есть веб-страница, начинающаяся с ограничения ширины 100.

Когда пользователь нажимает кнопку, я хочу изменить ограничение на: 200.

Я пробовал это:

NSLayoutConstraint *constrain = [NSLayoutConstraint
                                 constraintWithItem:self.webPage
                                 attribute:NSLayoutAttributeWidth
                                 relatedBy:NSLayoutRelationEqual
                                 toItem:self.webPage
                                 attribute:NSLayoutAttributeWidth
                                 multiplier:1
                                 constant:100];




[self.webPage addConstraint:constrain];

Но это исключает это исключение: "Невозможно одновременно удовлетворить ограничения".

Любые идеи?

Ответ 1

У вас есть два варианта.

  • Получить ссылку на исходное ограничение и изменить часть constant на 200
  • Получить ссылку на исходное ограничение и удалить его из представления и добавить новое ограничение

Я бы выбрал первый вариант. Чтобы получить ссылку, добавьте @property для ограничения вашего viewController и назначьте его при его создании.

Если вы создаете ограничение в xib или раскадровке, соедините ограничение с подключением IBOutlet к вашему коду, аналогично тому, что вы делаете при подключении UILabel.

Затем вы можете легко отрегулировать постоянную часть ограничения.


Кроме того, вы должны, вероятно, больше придерживаться следующих строк:

NSLayoutConstraint *constrain = [NSLayoutConstraint
                                 constraintWithItem:self.webPage
                                 attribute:NSLayoutAttributeWidth
                                 relatedBy:NSLayoutRelationEqual
                                 toItem:nil
                                 attribute:NSLayoutAttributeNotAnAttribute
                                 multiplier:1
                                 constant:100];

Ответ 2

если вы хотите установить ширину, не имеет toItem: set.

_myConstrain = [NSLayoutConstraint
                             constraintWithItem:self.webPage
                             attribute:NSLayoutAttributeWidth
                             relatedBy:NSLayoutRelationEqual
                             toItem:nil
                             attribute:NSLayoutAttributeNotAnAttribute
                             multiplier:1
                             constant:100];

// add to superview! not to self.webPage 
[self.view addConstraint:_myConstrain];

Если вы хотите изменить его позже:

_myConstrain.constant = 200.0f; 
[self.view layoutIfNeeded]; // you may be able to call this on self.webPage