Tengo un ejemplo muy simple UIScrollView
que simplemente no hace lo que se supone que debe hacer. No estoy seguro si es un error con la API o un error en mi código.UIScrollView no obtener un nuevo tamaño en la orientación cambiar
Básicamente, tengo un UIViewController
con un UIScrollView
como se ve. Cuando lo agrego al UIWindow
y cambio la orientación del iPad, cierro el tamaño del UIScrollView
s, que se informa incorrectamente (?).
Aquí es mi UIViewController
aplicación:
@implementation CustomViewController
- (void)loadView {
scrollView = [[[UIScrollView alloc] init] autorelease];
scrollView.delegate = self;
scrollView.backgroundColor = [UIColor redColor];
self.view = scrollView;
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
CGSize rect = scrollView.frame.size;
NSLog(@"will rotate w%f h%f", rect.width, rect.height);
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
CGSize rect = scrollView.frame.size;
NSLog(@"will animate rotation w%f h%f", rect.width, rect.height);
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
CGSize rect = scrollView.frame.size;
NSLog(@"did rotate w%f h%f", rect.width, rect.height);
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
@end
Cuando ejecuto el código anterior Veo las siguientes entradas en mi consola:
2010-07-11 11:03:05.214 Untitled2[6682:207] will rotate w768.000000 h1004.000000
2010-07-11 11:03:05.214 Untitled2[6682:207] will animate rotation w748.000000 h1024.000000
2010-07-11 11:03:05.619 Untitled2[6682:207] did rotate w748.000000 h1024.000000
2010-07-11 11:03:07.951 Untitled2[6682:207] will rotate w748.000000 h1024.000000
2010-07-11 11:03:07.958 Untitled2[6682:207] will animate rotation w768.000000 h1004.000000
2010-07-11 11:03:08.367 Untitled2[6682:207] did rotate w768.000000 h1004.000000
Como se puede ver, los cambios de orientación qué cambiar el tamaño de la UIScrollView
, pero solo para permitir la nueva barra de estado. Esperaría que el ancho y la altura cambien drásticamente, ya que el UIScrollView
es más ancho que alto y viceversa.
¿Hay alguna manera de obtener el UIScrollView
para informar que es de tamaño real?
Esto no está funcionando. Intercepto un cambio, luego uso NSStringFromRect (self.bounds) e imprime los límites "antes de cambiar". Pero la orientación actual del dispositivo devuelve el valor correcto. Al menos, eso consistentemente devuelve la misma cosa correctamente, pero hombre ... este problema no debería llevar tanto tiempo. Desde los documentos, mientras que los límites son los no derivados, ¿no es siempre 0,0, igual que el ancho del cuadro, igual que la altura del cuadro? –
El origen de los límites siempre es 0,0 por defecto a menos que esté cambiando la parte de la vista que desea visualizar. Eso es solo la mitad de la historia, un CGRect también contiene un miembro de tamaño y eso es lo que generalmente cambia al cambiar el tamaño, reorientar una vista. Las funciones de "voluntad" anteriores le dan los "valores anteriores", las funciones "sí" le dan los "valores posteriores". –