Autolayout - настроить положение метки Y на основе динамической высоты другой метки над ней - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть две метки. Метки A и B, как показано ниже.

Просмотр с обеими метками

Просмотр, когда высота метки A равна 0

Я хочу переместить Метку B вверх с верхнего поля до superview = 20pt, когда Высота Метки A равна нулю.

Если высота метки A> 0, то позиция метки B Y равна = Метка A Верхнее поле + Высота метки A + Расстояние по вертикали между меткой A и B. (т. Е. Нижняя часть метки A + Вертикальное расстояние ч / б Метка A и B = метка B Y позиция) Можно ли сделать это с помощью autolayout?

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете иметь все ограничения для LabelA.height> 0 случая, связанного с NSLayoutConstraint IBOutletCollection .

@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) *labelAScenarioConstraints;

То жедля сценария LabelA.height = 0, например

@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) *labelAWithoutHeightScenarioConstraints

А если вы хотите изменить его, просто сделайте что-то вроде:

for (NSLayoutConstraint *constraint in labelAScenarioConstraints) {
    [constraint setActive:labelA.frame.size.height > 0];
}
for (NSLayoutConstraint *constraint in labelAWithoutHeightScenarioConstraints) {
    [constraint setActive:labelA.frame.size.height == 0];
}

Вы можете активировать или деактивироватьограничение путем изменения этого свойства ... Активация или деактивация ограничения вызывает addConstraint: и removeConstraint: для представления, которое является ближайшим общим предком элементов, управляемых этим ограничением.Используйте это свойство вместо прямого вызова addConstraint: или removeConstraint:

Имейте в виду, что все обновления пользовательского интерфейса должны выполняться из основного потока.Если вы хотите анимировать изменение ограничений, вы можете поместить код в UIView animateWithDuration блок анимаций.

...