Я использую autolayout с этим макетом:
селфи с рамкой (0,80, 320, 488)
collectionView с рамкой (0,0,320,220)
нижний вид с рамкой (0,220,320,268)
и попытка добиться анимации, которая должна изменять размер underView, увеличивая его высоту, так что underView частично покрывает collectionView, перемещаясь снизу вверх.
Autolayout устанавливает ограничение по высоте для этих двух представлений, поэтому я создал IBOutlet для ограничения высоты underView, которое я настраиваю в анимации:
NSLog(@"underView height %.2f", self.underView.frame.size.height);
NSLog(@"offset (%.2f, %.2f)", offset.x, offset.y);
heightConstraint.constant += offset.y;
NSLog(@"heightConstraint %.2f", heightConstraint.constant);
[self.underView setNeedsUpdateConstraints];
[UIView animateWithDuration:ANIMATION_DURATION
delay:ANIMATION_DELAY
options:UIViewAnimationOptionCurveEaseOut
animations:^{
[self.underView layoutIfNeeded];
NSLog(@"underView height %.2f", heightConstraint.constant);
} completion:nil];
И в консоли я вижу:
2013-07-30 09:09:37.268 Cal[49611:a0b] underView height 268.00
2013-07-30 09:09:37.268 Cal[49611:a0b] offset (320.00, 144.00)
2013-07-30 09:09:37.269 Cal[49611:a0b] heightConstraint 412.00
2013-07-30 09:09:37.270 Cal[49611:a0b] underView height 412.00
Но ресайза вообще не происходит.
Единственная причина такого поведения, о которой я могу думать, - это ограничение высоты collectionView выше, но, поскольку я не хочу, чтобы коллекция перезагружалась, я не могу работать с этим.
Мне интересно, как добиться увеличения нижнего представления над коллекцией? Я пытался использовать приоритеты ограничений, но это не сработало...