Ich habe ein sehr einfaches UIScrollView
Beispiel, das einfach nicht tut, was es soll. Nicht sicher, ob es ein Fehler mit der API oder ein Fehler in meinem Code ist.UIScrollView bekommt keine neue Größe bei Orientierungsänderung
Grundsätzlich habe ich eine UIViewController
mit einer UIScrollView
wie es ist. Wenn ich es zum UIWindow
hinzufügen und die Ausrichtung des iPad ändern, logge ich die UIScrollView
s Größe aus, die falsch (?) Berichtet wird.
Hier ist meine UIViewController
Umsetzung:
@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
Wenn ich den obigen Code ausführen ich die folgenden Einträge in meiner Konsole sehen:
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
Wie Sie die Orientierung Änderungen sehen können, ist die Größe des UIScrollView
, aber nur um die neue Statusleiste zu erlauben. Ich würde erwarten, dass die Breite und Höhe drastisch ändern, wie die UIScrollView
ist, wie breit es ist hoch und umgekehrt.
Gibt es eine Möglichkeit, die UIScrollView
zu erhalten, um ihre tatsächliche Größe zu melden?
Das funktioniert nicht. Ich nehme eine Änderung ab, dann benutze ich NSStringFromRect (self.bounds) und drucke die Grenzen "kurz vor dem Ändern". Die currentDevice-Ausrichtung gibt jedoch den richtigen Wert zurück. Immerhin gibt es immer dasselbe, aber Mann ... dieses Problem sollte nicht so lange dauern. Aus den Dokumenten, während Grenzen die nicht abgeleitete ist, ist es nicht immer 0,0, genauso wie die Rahmenbreite, genauso wie die Rahmenhöhe? –
Der Ursprung der Grenzen ist standardmäßig immer 0,0, es sei denn, Sie ändern den Teil der Ansicht, den Sie anzeigen möchten. Das ist nur die halbe Geschichte, ein CGRect enthält auch ein Größenelement und das ändert sich normalerweise, wenn Sie die Größe einer Ansicht ändern. Die obigen "Will" -Funktionen geben Ihnen die "Vorher-Werte", die "Did" -Funktionen geben Ihnen die "Nach-Werte". –