Скажите, что у меня есть проект, который выглядит следующим образом:
Есть два UIView
- один, называемый yellowBox
, а другой - redBox
. Ограничения автоматического макета диктуют, что yellowBox
составляет 60 точек от вершины супервизора с 350 точками ведущего и конечного пробелов (т.е. Слева и справа от представления). redBox
имеет те же ограничения на ведущее и конечное пространство. Существует ограничение вертикального пространства между двумя полями 0, чтобы указать, что нижняя часть yellowBox
должна всегда находиться непосредственно над redBox
.
Когда пользователь нажимает кнопку "Развернуть желтую рамку", мне бы хотелось, чтобы высота yellowBox
увеличивалась, и, как результат, redBox
перемещается вниз, чтобы продолжить выполнение ограничения по вертикальному пространству (что yellowBox
всегда находится поверх redBox
). Вот код анимации:
- (IBAction)expandYellowBox:(id)sender {
[UIView animateWithDuration:0.5
animations:^{
CGRect newFrame = self.yellowBox.frame;
newFrame.size.height += 50;
self.yellowBox.frame = newFrame;
}];
}
Однако я не смог заставить это работать должным образом. Как вы можете видеть по красной иконке, в настоящее время существует проблема с ограничениями:
что достаточно справедливо, так как нет возможности для автоматического макета знать высоту ящиков. Однако я не знаю, как решить эту проблему таким образом, чтобы она позволяла изменять размеры и перемещать ящики. Например, если я укажу ограничение высоты на yellowBox
, то это предотвратит его изменение размера. Если я установил ограничение по высоте больше или равно (чтобы высота yellowBox
увеличивалась), я получаю другую ошибку ограничения:
Все ограничения были установлены с использованием Xcode в раскадровке - ни один из них не был написан в коде.
Любая помощь очень ценится.
РЕДАКТИРОВАТЬ: Как оказалось, yellowBox
растет при нажатии кнопки - это просто я не могу сказать, потому что он появляется за redBox
. Я заметил только после четырехкратного щелчка, и он начал появляться в нижней части redBox
. Тем не менее, остается тот же вопрос - как заставить redBox
всегда придерживаться нижней части yellowBox
.