UIView animation trying to change the frame size doesn't work in iOS 8 but in iOS 7

ƒernando Valle picture ƒernando Valle · Sep 26, 2014 · Viewed 12.4k times · Source

I wanted to resize an UIView, my code works perfect in iOS 7.1 but when I run it in iOS 8 it didn't work properly (I will explain below).

I have my UIView int the storyboard with values (0,67,511,320), I want to resize to full screen on iPad, so I added the following code:

        [UIView animateWithDuration:0.5 animations:^{

            CGRect frame = containerView.frame;
            frame.origin.x = 0;
            frame.origin.y = 67;
            frame.size.height = 643;
            frame.size.width = 1024;
            containerView.frame = frame;
            ...

        }completion:^(BOOL finished) {
            ...
        }];

I wanted something like:

 _________________________________
|           |                     |
|           |                     |
|     A     |                     |
|___________|                     |
|                                 |
|                BACKGROUND       |
|                                 |
|                                 |
|_________________________________|

                |
                V
 _________________________________
|                                 |
|                                 |
|                                 |
|               A                 |
|                                 |
|                                 |
|                                 |
|                                 |
|_________________________________|

But it starts the animation like (0,67,0,0) to (0,67,511,320)

Any clue about what is happening? Or alternative?

Answer

LorikMalorik picture LorikMalorik · Sep 26, 2014

You should disable pregenerated constraints. The most simple way is to use autoresizing masks instead of constraints for animating view.

containerView.translatesAutoresizingMaskIntoConstraints = YES;

You can put this code to your -viewDidLoad method or just above [UIView animateWithDuration:...