UIScrollView + ändern Sie die Ausrichtung = Durcheinander Untersichten (iPad)
Ich möchte an einem UIScrollView
als mein Haupt-container in der app, die es mir ermöglicht, streichen Sie hin und her zwischen den Untersichten. Um dies zu erreichen, habe ich eine UIViewController
Unterklasse mit einer UIScrollView
IBOutlet:
In der viewDidLoad
Methode Baue ich den sub-Seiten:
for (int i= 0; i< pageCount; i++)
{
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * i;
frame.origin.y = 0;
UIWebView* aWebView= [[UIWebView alloc] initWithFrame:frame];
[self.scrollView addSubview:aWebView];
}
Beim Start der app (portrait-Modus), funktioniert alles. Das heißt, die UIWebViews
sind, layed out Seite an Seite mit den richtigen Maßen, und ich kann swipe zwischen Ihnen hin und her.
Wenn ich drehen, um die Landschaft, es scheint, dass weder der scrollview Größe noch die Untersichten angepasst werden.
Ich weiß nicht, was ich tun sollte, um die Größe der Untersichten und die scrollview selbst, oder an welcher Stelle im code soll ich alles tun, und ich kann nicht scheinen zu finden, die Beispiele für diese.
Jemand wissen, was zu tun ist?
[edit] Versuch, passen Sie Größen wie vorgeschlagen von mahboudz:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * pageCount, self.scrollView.frame.size.height);
for (int i= 0; i< pageCount; i++)
{
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * i;
frame.origin.y = 0;
UIWebView* view= [[self.scrollView subviews] objectAtIndex:i];
view.frame= frame;
}
}
Diese Art von macht, was ich will, hat aber die folgenden Probleme:
1) kann man sehen, die Untersichten wachsen, um die richtige Display-Größe bei einer änderung der Orientierung
2) wenn die aktuelle Seite ist, zum Beispiel, Seite 2 von 5 Seiten, wird die Seite nicht vollständig sichtbar, nachdem die Ausrichtung geändert wurde, aber ist off-screen von 40 Pixel
3), bekomme ich komische Effekte, je nachdem, ob die app gestartet wird im portrait-oder landscape-Modus (simulator), ill versuchen zu erklären:
Wenn die app gestartet wird in den portrait-Modus:
- Die Form/Rahmen der Untersichten sieht Durcheinander/offscreen, siehe screenshots:
http://i53.tinypic.com/21jr76x.png
- wenn ich drehen, um die Landschaft, alles sieht okay aus, scrollen funktioniert hervorragend. auch wenn ich wieder zurück drehen auf hochformat, alles Super jetzt:
http://i55.tinypic.com/if3iiw.png
Wenn die app launchend im landscape-Modus:
- Bekomme ich die gleiche Durcheinander/offscreen glitches als im portrait-Modus
- Hin-und herschalten zwischen hoch-und Querformat behebt dieses für landscape-Modus
- ABER: Portrait-Modus werden die Untersichten mit der Breite des landscape-Modus, so Untersichten sind zu breit
Ich zu beheben versucht 1) zu tun, der code oben in willRotateToInterfaceOrientation
aber es komplett versaut das layout.
Ich behoben 2), indem Sie den folgenden code, um didRotateFromInterfaceOrientation
:
//update the scroll view to the appropriate page
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * self.currentPage;
frame.origin.y = 0;
[self.scrollView scrollRectToVisible:frame animated:NO];
Hinweis: die aktuelle Seite wird bestimmt in scrollViewDidScroll
Ich habe keine Ahnung, wie zu beheben 3)
InformationsquelleAutor user944943 | 2011-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssten Sie zum zurücksetzen der frame-Größe, Größe des Inhalts und die Inhalts-offset, um die Untersichten in einer richtigen position.
Dieser code platziert werden soll in der Methode
Überprüfen, wie gut die Antwort auf diese Frage:
Saubere autorotation übergänge in eine paging-UIScrollView
Es hat gutes Beispiel genannt Rotolling für rotierende UIScrollView mit paging aktiviert.
Hoffe, das hilft.
P. S: ich bin mit einem problem konfrontiert, auf Neupositionierung der Mitte des UIWebView auf die rotation.
InformationsquelleAutor Lily
Müssen Sie implementieren
viewWillRotate/viewDidRotate
und Anpassungen vornehmen, um unsere Inhalte Größe und Orientierung wie nötig.Ich glaube nicht, dass Sie brauchen, um setNeedsDisplay. Ich bin ziemlich sicher, dass Sie brauchen, um die Größe Ihrer Bilder/Grenzen und contentSize, etc. Sehen, wenn Sie eine automatische Verschiebung/Größenänderung helfen, durch die Einrichtung des auto-Größenänderung von flags mit InterfaceBuilder (oder per code).
Hinzugefügt mehr code und versuche, das Problem zu beheben oben
InformationsquelleAutor mahboudz