UIView animowane zmiany z automatycznymi ograniczeniami układu
Powiedz, że mam projekt, który wygląda następująco:
Istnieją dwaUIView
s - jeden nazwanyyellowBox
a drugi dzwoniłredBox
. Ograniczenia układu automatycznego określają, żeyellowBox
to 60 punktów z górnej części superwizji z 350 punktami wiodącymi i końcowymi spacjami (tj. z lewej i prawej strony widoku). TheredBox
ma takie same ograniczenia przestrzeni początkowej i końcowej. Między dwoma polami 0 znajduje się pionowe ograniczenie przestrzeni, które wskazuje, że dolna część polayellowBox
powinien zawsze znajdować się bezpośrednio naredBox
.
Gdy użytkownik dotknie przycisku Rozwiń żółte pole, chciałbym wysokośćyellowBox
zwiększyć, aw rezultacieredBox
przesuwa się w dół, aby nadal spełniać ograniczenie przestrzeni w pionie (żeyellowBox
jest zawsze na wierzchuredBox
). Oto kod animacji:
- (IBAction)expandYellowBox:(id)sender {
[UIView animateWithDuration:0.5
animations:^{
CGRect newFrame = self.yellowBox.frame;
newFrame.size.height += 50;
self.yellowBox.frame = newFrame;
}];
}
Jednak nie udało mi się tego poprawnie uruchomić. Jak widać po czerwonej ikonie, istnieje problem z ograniczeniami w tej chwili:
co jest wystarczająco uczciwe, ponieważ nie ma możliwości automatycznego ustawienia wysokości pudełek. Nie wiem jednak, jak rozwiązać ten problem w taki sposób, aby umożliwić zmianę rozmiaru pudełek i ich przenoszenie. Na przykład, jeśli określę ograniczenie wysokości nayellowBox
to uniemożliwi zmianę rozmiaru. Jeśli ustawię ograniczenie wysokości nawiększe lub równe (aby umożliwićyellowBox
wysokość do zwiększenia), a następnie otrzymuję inny błąd ograniczenia:
Wszystkie ograniczenia zostały ustanowione przy użyciu Xcode w serii ujęć - żaden nie został napisany kodem.
Każda pomoc bardzo doceniana.
EDYTOWAĆ: Jak się okazuje,yellowBox
rośnie po kliknięciu przycisku - po prostu nie mogłem powiedzieć, ponieważ pojawia się zaredBox
. Zauważyłem to dopiero po czterech kliknięciach i zaczęło pojawiać się na doleredBox
. Jednak wciąż pozostaje to samo pytanie - jak zdobyćredBox
zawsze trzymać się dnayellowBox
.