[iOS]: Auto layout animate change of frame position when removing and adding constraints

StackOverflow https://stackoverflow.com/questions/23410455

  •  13-07-2023
  •  | 
  •  

質問

I have a complex autolayout which needs to adapt to rotation by removing old constraints and adding new ones.

I have a grid layout of views inside a containerView.

The problem is when I call

  [UIView animateWithDuration:0.4 animations:^{
            [self.containerView layoutIfNeeded];
    }];

The views always animate from the position [0,0] to their new position. What I would prefer is that the views would move from their old position (before I remove the constraints) to the new positions (after removal and addition of the new constraints)

Has someone been able to achieve this?

役に立ちましたか?

解決

The following post gave me the hint to make it work:

But not the actual accepted answer but rather:

[UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionLayoutSubviews animations:^{
    [self.view layoutIfNeeded];
} completion:nil];

The optional parameter options:UIViewAnimationOptionLayoutSubviews inspired me to try different options and the actual option needed was options:UIViewAnimationOptionBeginFromCurrentState

[UIView animateWithDuration:duration delay:delay options:UIViewAnimationOptionBeginFromCurrentState animations:^{
        [self layoutIfNeeded];
    } completion:nil];

Which allowed the animation to occur from the last position, even if constraints are removed and new ones are added.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top