Скрыть автоопределение UIView: как получить существующий NSLayoutConstraint для обновления этого

Я знаю, как изменить существующее ограничение. Но я хотел бы знать, нашел ли кто-нибудь решение для получения ограничения без сохранения этого свойства в качестве свойства.

Текущее решение для установки высоты Constraint:

1) сохранить NSLayoutConstraint в переменной:

NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:myView
                                                                    attribute:NSLayoutAttributeHeight
                                                                    relatedBy:NSLayoutRelationEqual
                                                                       toItem:nil
                                                                    attribute:NSLayoutAttributeNotAnAttribute
                                                                   multiplier:1.0f
                                                                     constant:20];
[self.view addConstraint:heightConstraint];

2) Установите константу Constraint, сохраненную в "0.0" (чтобы скрыть это представление)

[heightConstraint setConstant:200];

Я ищу решение, подобное этому:

 [myView setConstraint:@"0." forAttribute:NSLayoutAttributeHeight]

Ответ 1

Я только что построил эту категорию (https://github.com/damienromito/UIView-UpdateAutoLayoutConstraints), которая ограничивает обновление, если вы хотите:

//you can use tools to hide/show a uiview
[myView1 hideByHeight:YES];

enter image description here

Или просто сделайте это, чтобы скрыть UIView с автоопределением:

//Hide View 
[myView1 setConstraintConstant:0 forAttribute:NSLayoutAttributeHeight];

Ответ 2

UIView имеет метод, который возвращает все ограничения, влияющие на его расположение в одном из размеров:

NSArray *constraints = 
[someView constraintsAffectingLayoutForAxis:UILayoutConstraintAxisVertical];

Тогда вы можете просто найти тот, который вас интересует.