UIView анимированные изменения с автоматическими ограничениями макета
Скажи, что у меня есть проект, который выглядит следующим образом:
Есть два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
.