У меня есть UILabel с двумя ограничениями. Одно из ограничений я активирую, а другое оставляю отключенным. У меня есть кнопка, которая отключает первое ограничение и активирует второе ограничение. Затем при повторном нажатии отключает второе ограничение и повторно активирует первое ограничение. Нажатие на эту кнопку в первый раз работает как задумано. UILabel, включая все другие UILabel, привязанные к нему, перемещается в другую позицию. Однако при нажатии на кнопку, чтобы переместить ее назад, раскладка ломается. UILabel перемещается в положение, почти такое же, как и раньше, но все другие UILabel, ограниченные им, остаются на месте и не возвращаются в исходное положение.
Вот функция, которая обрабатывает активацию ограничений.
- (void)tapOnce:(UIGestureRecognizer *)gesture
{
if (_constraintLabelOne.isActive) {
[_constraintLabelOne setActive:NO];
[_constraintLabelTwo setActive:YES];
} else {
[_constraintLabelTwo setActive:NO];
[_constraintLabelOne setActive:YES];
}
[self layoutIfNeeded];
}
Ограничения выглядят следующим образом.
_constraintLabelOne = [NSLayoutConstraint constraintWithItem:myLabel
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:topView
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:6];
_constraintLabelTwo = [NSLayoutConstraint constraintWithItem:myLabel
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:topView
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:20];
Другие метки, ограниченные myLabel
, застряли во второй позиции после того, как tapOnce
был вызван в первый раз. Почему они не возвращаются в исходное положение после того, как ограничения myLabel
были обновлены?
Я прикрепил скриншот с рисунком текущего поведения. Синяя рамка обозначает topView
. Пурпурный прямоугольник представляет myLabel
. Первый экран перед вызовом tapOnce
. Средний экран после вызова tapOnce
один раз. Правый экран после вызова tapOnce
дважды.