Скажите, что у меня есть проект, который выглядит следующим образом:UIView анимированные изменения с авто ограничений макета
Есть два UIView
s - один называется yellowBox
, а другой называется redBox
. Ограничения автоматического макета диктуют, что yellowBox
- это 60 точек от вершины супервизора с 350 точками переднего и конечного пробелов (то есть слева и справа от представления). redBox
имеет те же ограничения на ведущее и конечное пространство. Существует ограничение вертикального пространства между двумя ячейками 0, чтобы указать, что нижняя часть yellowBox
всегда должна быть непосредственно сверху redBox
.
Когда пользователь нажимает Развернуть кнопку Yellow Box, я хотел бы высоту 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 в раскадровке - ни один из них не был написан в коде.
Любая помощь очень ценится.
EDIT: Как выясняется, yellowBox
растет, когда кнопка нажата - это просто я не могу сказать, потому что кажется, за redBox
. Я заметил только после четырехкратного щелчка, и он начал появляться в нижней части redBox
. Тем не менее, остается тот же вопрос - как заставить redBox
всегда придерживаться нижней части yellowBox
.
может у проверить погоду метод viewDidLayoutSubViews называется в Уре ViewController? При выполнении события click. – CoolMonster
Нет, метод 'viewDidLayoutSubViews' не вызывается. – Skoota
попытка установить привязку вместо кадра может работать некоторое время. даже повторить self.yellowBox.frame = newFrame; дважды в u код может также исправлять несколько раз – CoolMonster