El mejor método para cambiar el tamaño de UIView cuando se gira al paisaje y viceversa

Como soy muy nuevo en la progtwigción de ios, tengo más preguntas de layout general. Tengo un ViewController que contiene un GraphView (UIScrollView + UIView) que funciona bien. Cuando estoy girando al paisaje quiero que GraphView cambie el tamaño de su altura a la altura de la pantalla (por lo que llena toda la pantalla), pero solo 300pts cuando está en vertical.

Lo que hice hasta ahora es implementar viewWillLayoutSubviews en ViewController y restablecer las restricciones:

 - (void)viewWillLayoutSubviews{ _graphViewHeightConstraint.constant = ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait) ? 300:[[UIScreen mainScreen] bounds].size.height-self.navigationController.navigationBar.frame.size.height - 2*_distanceToTopView.constant; } 

y en GraphView.m:

 - (void)layoutSubviews{ kGraphHeight = self.frame.size.height; [self setNeedsDisplay]; } 

(porque necesito la variable kGraphHeight en el código para dibujar el gráfico). Esto no parece una solución muy elegante, así que quería preguntar cuál sería la mejor manera de hacerlo. Muchas gracias por sus insumos 🙂

En GraphView.m

 - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; kViewWidth = <GET_SCREEN_WIDTH_HERE>; kViewHeight = <GET_SCREEN_HEIGHT_HERE>; [self updateViewDimensions]; } 

y el método updateViewDimensions establecerá el marco de UIScrollView y UIView

 - (void)updateViewDimensions { scrollView.frame = self.view.frame; yourView.frame = CGRectMake(kViewXStartsFrom, kViewYStartsFrom, kViewWidth, kViewHeight); } 

después de rotar la vista a Landscape viewDidLayoutSubviews se llamará.

Está funcionando para mi