So blenden Sie einen UIView ganz, als Orientierung ändern?
Ich gern eine Ansicht/View controler, die automatisch zeigt/versteckt eine Untersicht, wenn im Querformat. Ich will die Untersicht zu verschwinden, ganz und anderen Unteransichten zu nehmen seinen Platz.
Mit einem UIViewController, ich schrieb code, setzt den Untersichten' frame-Eigenschaft und rufen Sie es auf:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration;
Löst dies das problem die meisten der Zeit, hat aber Probleme, wenn die änderung der Ausrichtung ist passiert, wenn die Ansicht nicht angezeigt werden.
um dies umgehen, ich fordere auch die Anpassungsmethode auf:
- (void)viewWillAppear:(BOOL)animated;
aber dies hat Probleme in einigen seltenen Fällen (mit einer UISearchDisplayController) also ich fordere auch die Anpassungsmethode auf
- (void)viewDidAppear:(BOOL)animated;
Verstehen Sie, ich bin unglücklich mit diesem code, und ich bin auf der Suche für ein besser/schneller Weg, dies zu tun.
Irgendwelche Ideen?
InformationsquelleAutor Panagiotis Korros | 2010-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Annahme, dass alle haben Sie ist ein UIWebView und ein Werbebanner, dann können Sie nur manuell ändern, die webView, wenn in der Landschaft:
Dann auch tun
Den Dimensionen annehmen 44.0 Höhe für die ad-banner und keine Navigationsleiste (44.0) oder die status bar (20.0), so müssen Sie möglicherweise passen Sie die zahlen für Ihr layout.
Ich zerlegte meine Vorherige Antwort in beide und haben Methoden. Dies sollte Verbesserung der Umsetzung.
Tun Sie die Größe in
didRotateFromInterfaceOrientation
war die fehlende trick. Ich nenne diesen code inviewWillAppear
als gut, so könnte es nicht beantworten @Panagiotis Korros, aber es lohnt sich meiner bounty.InformationsquelleAutor PengOne
Innen
Verstecken
Wieder zu zeigen
Oh, Sie wollen zu tun. Haben Sie überprüft, ob man mit layoutSubviews und layoutIfNeeded?
InformationsquelleAutor Tuomas Pelkonen
Wenn es mehrere Untersichten müssen verlegt werden, die sehr unterschiedlich in quer-und hochformat, dann ist es vielleicht einfacher, es zu hacken, mit einem extra UIView, sagen landscapeView, aufgenommen im IB. Laden Sie diese Ansicht mit Schaltflächen, Untersichten, usw. und legen Sie es aus wie Sie möchten. Sie können alle die gleichen verbindungen wie bei den üblichen (portrait) Ansicht. Denken Sie daran, zu erklären
IBOutlet UIView *landscapeView;
im header. Dann können Sie die Ansicht mit diesem:Wenn das timing nicht klappt, wie Sie möchten, dann könnten Sie auch versuchen, etwas ähnliches innerhalb
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
Wenn Sie wollen bekommen Sie sogar noch schicker mag, dann lassen Sie die Haupt-Ansicht leer ist, schaffen sowohl ein
UIView *portraitView
und einUIView *landscapeView
, dann entfernen Sie die aktuelle Ansicht inwillRotateToInterfaceOrientation
und fügen Sie die neue Ansicht indidRotateToInterfaceOrientation
.Sicher zu sein, sollten Sie auch sicherstellen, dass die richtige Ansicht gezeigt wird zunächst:
und auch
Oh. Wenn es das ist alles, was Sie brauchen, dann einfach manuell die Größe der webview.
InformationsquelleAutor PengOne
option ist, um eine modale Ansicht mit einem crossfade-überblendung auf drehen, und entlassen ihn, wenn er gedreht wird, zurück.
InformationsquelleAutor MCannon
Personnaly, für Situationen wie diese, ich fühle mich wie zu Kodieren Untersicht position ist viel einfacher, als sich auf den Rahmen, das layout-management.
So, wenn Sie die app zeigt die Titelleiste, die eine Höhe von 20 Punkten, hier ist was ich tun würde:
InformationsquelleAutor mmoris
Nutze ich die parent-view-Grenzen in meinem code. Versuchen Sie den code unten sehen, ob die animation funktioniert gut für Sie.
InformationsquelleAutor Klu