UILabel animando incorrectamente

Por alguna razón, el text de UILabel quiere establecer su alignment sin animation, y no puedo entender cómo hacer que el text se anime junto con el rest de la label.

Tengo el siguiente código en este momento:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(40,200,100,50)]; [label setText:@"Label Name"]; [label setBackgroundColor:[UIColor blueColor]]; [label setFont:[UIFont systemFontOfSize:17.0]]; [label setTextColor:[UIColor blackColor]]; [label setTextAlignment:NSTextAlignmentCenter]; [self.view addSubview:label]; [UIView animateWithDuration:3 animations:^{ [label setFrame:CGRectMake(40,200,200,300)]; }]; 

Este código se invoca en el método de acción de un button. Normalmente, la animation ocurrirá por separado de la creación de la label, pero la pongo en el mismo método para probarlo.

Por alguna razón, cuando esto se ejecuta, la label cambia de tamaño perfectamente, como se supone que es, y puedo ver el tamaño del marco. Sin embargo, el text se alinea en el eje horizontal a la position en la que estará al final de la animation. En el eje vertical, sin embargo, se anima correctamente.

En este momento, esta es la apariencia de la animation:

animate1animate2animate3

Por alguna razón, el text de la label permanece centrado al moverse hacia arriba y hacia abajo, pero no permanece centrado de izquierda a derecha, como supongo que debería hacerlo.

He mirado por todas partes y no pude encontrar una solución a esto. ¿Alguien sabe qué UILabels se comporta así y si hay alguna forma de evitarlo?

Puede agregar una UIView y luego agregar UILabel como su subvista:

  UIView *view = [[UIView alloc] initWithFrame:CGRectMake(40, 20, 100, 50)]; [view setBackgroundColor:[UIColor blueColor]]; [self.view addSubview:view]; UILabel *label = [[UILabel alloc] init]; [label setText:@"Label Name"]; [label setBackgroundColor:[UIColor clearColor]]; [label setFont:[UIFont systemFontOfSize:17.0]]; [label setTextColor:[UIColor blackColor]]; [label setTextAlignment:NSTextAlignmentCenter]; [label sizeToFit]; [label setNumberOfLines:0]; [label setFrame:CGRectOffset(label.frame, (view.frame.size.width - label.frame.size.width)/2, (view.frame.size.height - label.frame.size.height)/2)]; [view addSubview:label]; [UIView animateWithDuration:3 animations:^{ [view setFrame:CGRectMake(40, 20, 200, 300)]; [label setFrame:CGRectMake((view.frame.size.width - label.frame.size.width)/2, (view.frame.size.height - label.frame.size.height)/2, label.frame.size.width, label.frame.size.height)]; } completion:^(BOOL finish){ }];