Tamaño de contenido UIScrollview cuando la orientación cambia

Tengo una vista de desplazamiento con pagination. En viewDidLoad, compruebo si la orientación actual es horizontal y luego establezco su altura de contenido

if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation])) { [scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages,340)]; } else if (UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation])) { [scroll setFrame:CGRectMake(0,0,480,480)]; [scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 440)]; } 

todo funciona bien scrollview se desplaza suavemente y no hay desplazamiento diagonal.

pero cuando cambia la orientación,

tengo que configurar el marco de scrollview y volver a visualizarlo y lo estoy configurando como sigue

 -(void)orientationChanged:(id)object { if(UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation])) { self.scroll.frame = [[UIScreen mainScreen]bounds]; [scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 340)]; } else { self.scroll.frame = CGRectMake(0,0,480,480); [scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 600)]; } } 

No puedo entender por qué tengo que configurar la altura del tamaño de contenido hasta 600 en modo horizontal, y eso tampoco es suficiente. y agrega un problema más que scrollview comienza a desplazarse en diagonal que no quiero, ya que se ve tan extraño. ¿Alguien puede ayudarme a entender dónde y qué me falta?

He configurado la máscara de autorretrato de scrollview como

 [scroll setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleHeight]; 

pero cambiarlo no ayuda.

Aquí es un problema en su código. ¿Por qué estás configurando el tamaño de fotogtwig como este? Solo tiene el tamaño de la pantalla de 320px width . Y cuando cambie a landscape , la altura será de solo 320px . Pero está configurando la height desplazamiento como 480px y goes out of the screen y start to scroll diagonally .

 self.scroll.frame = CGRectMake(0,0,480,480); 

En lugar de ese tamaño de cuadro, cambie de este modo

 self.scroll.frame = CGRectMake(0,0,480,320); 

Y necesita configurar el tamaño de contenido dependiendo del contenido que tenga dentro de la vista de desplazamiento en cualquiera de las dos orientaciones.

  1. No uses UIDeviceOrientation . Use UIInterfaceOrientation en UIInterfaceOrientation lugar. DeviceOrientation tiene dos opciones adicionales que no necesitas aquí. ( UIDeviceOrientationFaceUp y UIDeviceOrientationFaceDown )

  2. Devuelve Yes desde shouldAutorotateToInterfaceOrientation

  3. Ahora willRotateToInterfaceOrientation: duration: se llamará cada vez que gire su dispositivo.

  4. Implementar este método de esta manera.

     -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { CGRect frame; int pageNumber = 2; int statusBarHeight = 20; if ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)) { frame = CGRectMake(0, 0, 480, 320 - statusBarHeight); } else { frame = CGRectMake(0, 0, 320, 480 - statusBarHeight); } scrollView.frame = frame; scrollView.contentSize = CGSizeMake(frame.size.width * 2, frame.size.height); } 

    Dejar,

    pageNumber = 2

    statusBarHeight = 20