Da die ShouldAutorotateToInterfaceOrientation
in iOS ist veraltet 6 und verwenden ich , dass eine bestimmte Ansicht zu zwingen Porträt nur , was ist der richtige Weg , dies in iOS 6 zu tun? Dies ist nur für einen Bereich meiner App, alle anderen Ansichten können gedreht werden.
ios
xcode
ios6
xamarin.ios
Neal
quelle
quelle
Der beste Weg für iOS6 wird speziell in "iOS6 By Tutorials" vom Ray Wenderlich-Team - http://www.raywenderlich.com/ - angegeben und ist in den
UINavigationController
meisten Fällen besser als Unterklassen .Ich verwende iOS6 mit einem Storyboard, das einen
UINavigationController
Satz als anfänglichen Ansichts-Controller enthält.//AppDelegate.m - Diese Methode ist vor iOS6 leider nicht verfügbar
//MyViewController.m - Gibt die Orientierungen zurück, die Sie für jede unterstützen möchten
UIViewController
quelle
Diese Antwort bezieht sich auf die Fragen, die in den Kommentaren des OP-Beitrags gestellt wurden:
Um zu erzwingen, dass eine Ansicht in einer bestimmten Ausrichtung angezeigt wird, fügen Sie Folgendes in viewWillAppear ein:
Es ist ein bisschen wie ein Hack, aber dies erzwingt die
UIViewController
Darstellung im Hochformat, selbst wenn der vorherige Controller Querformat warUPDATE für iOS7
Die oben genannten Methoden sind jetzt veraltet. Verwenden Sie daher für iOS 7 Folgendes:
Interessanterweise muss zum Zeitpunkt des Schreibens entweder die Gegenwart oder die Entlassung animiert sein. Wenn beides nicht der Fall ist, erhalten Sie einen weißen Bildschirm. Keine Ahnung, warum das funktioniert, aber es funktioniert! Der visuelle Effekt ist je nach Animation unterschiedlich.
quelle
Daher stieß ich auf das gleiche Problem, wenn nur modale Hochformatansichten angezeigt wurden. Normalerweise würde ich eine erstellen
UINavigationController
, dieviewController
als festlegenrootViewController
und dann dieUINavigationController
als modale Ansicht anzeigen. Bei iOS 6viewController
wird der Navigationscontroller nun nach den unterstützten Schnittstellenausrichtungen gefragt (die jetzt standardmäßig nur für das iPad und für das iPhone alles andere als verkehrt herum sind).Lösung : Ich musste
UINavigationController
die Autorotationsmethoden unterordnen und überschreiben. Irgendwie lahm.quelle
IOS 5
IOS 6
quelle
Ich bin mit der Antwort von @aprato nicht einverstanden, da die UIViewController-Rotationsmethoden in Kategorien selbst deklariert sind, was zu undefiniertem Verhalten führt, wenn Sie dann in einer anderen Kategorie überschreiben. Es ist sicherer, sie in einer UINavigationController- (oder UITabBarController-) Unterklasse zu überschreiben
Dies gilt auch nicht für das Szenario, in dem Sie aus einer Querformatansicht nur VC in ein Hochformat verschieben / präsentieren / einfügen oder umgekehrt. Um dieses schwierige Problem zu lösen (das von Apple nie angesprochen wurde), sollten Sie:
In iOS <= 4 und iOS> = 6:
In iOS 5:
Diese werden UIKit WIRKLICH dazu zwingen, alle Ihre SollteAutorotate, unterstütztenInterfaceOrientations usw. neu zu bewerten.
quelle
Ich habe einen sehr guten Ansatz beim Mischen von https://stackoverflow.com/a/13982508/2516436 und https://stackoverflow.com/a/17578272/2516436
und geben Sie die Orientierungen zurück, die Sie für jeden UIViewController unterstützen möchten
quelle
Ich habe eine relativ komplexe universelle App mit UISplitViewController und UISegmentedController und habe einige Ansichten, die in Querformat mit dargestellt werden müssen
presentViewController
. Mit den oben vorgeschlagenen Methoden konnte ich das iPhone ios 5 & 6 akzeptabel zum Laufen bringen, aber aus irgendeinem Grund weigerte sich das iPad einfach, es als Landschaft darzustellen. Schließlich fand ich eine einfache Lösung (implementiert nach stundenlangem Lesen und Ausprobieren), die sowohl für Geräte als auch für iOS 5 und 6 funktioniert.Schritt 1) Geben Sie auf dem Controller die erforderliche Ausrichtung an (mehr oder weniger wie oben angegeben).
Schritt 2) Erstellen Sie eine einfache UINavigationController-Unterklasse und implementieren Sie die folgenden Methoden
Schritt 3) Präsentieren Sie Ihren viewController
Hoffe das ist hilfreich für jemanden.
quelle
Hier nicht langweilig zu sein, aber würden Sie so freundlich sein, Ihre Unterklasse zu teilen? Danke dir.
edit: nun, ich habe es endlich geschafft, die Unterklasse war kinderleicht zu machen. Ich musste nur die
navigationController
in derAppDelegate
alsUINavigationControllerSubclass
anstelle der Standardeinstellung deklarierenUINavigationController
und dann Ihre Unterklasse ändern mit:So kann ich jede Ansicht einstellen, die ich drehen möchte oder nicht, indem ich anrufe
viewDidLoad
Hoffe, diese Optimierung wird auch anderen helfen, danke für deinen Tipp!
Tipp: Nutzen Sie
Sie haben also nicht die gewünschte Hochformatansicht im Querformat oder umgekehrt.
quelle
Ich habe es nicht selbst getestet, aber die Dokumentation besagt, dass Sie diese Methoden jetzt überschreiben können:
supportedInterfaceOrientations
undpreferredInterfaceOrientationForPresentation
.Sie können wahrscheinlich das erreichen, was Sie wollen, indem Sie nur die gewünschte Ausrichtung für diese Methoden festlegen.
quelle
Die Antworten unter Verwendung von Unterklassen oder Kategorien, um VCs in den Klassen UINavigationController und UITabBarController zuzulassen, funktionieren gut. Das Starten eines Nur-Hochformat-Modals von einem Querformat-Controller in der Registerkartenleiste ist fehlgeschlagen. Wenn Sie dies tun müssen, verwenden Sie den Trick, eine nicht animierte modale Ansicht anzuzeigen und auszublenden , aber tun Sie dies in der viewDidAppear-Methode . In viewDidLoad oder viewWillAppear hat es bei mir nicht funktioniert.
Abgesehen davon funktionieren die oben genannten Lösungen einwandfrei.
quelle
Für Monotouch können Sie dies folgendermaßen tun:
quelle
Ich sehe die vielen Antworten, bekomme aber nicht die bestimmte Idee und Antwort über die Ausrichtung, sehe aber den Link gut, verstehe die Ausrichtung und entferne die kraftvolle Drehung für ios6.
http://www.disalvotech.com/blog/app-development/iphone/ios-6-rotation-solution/
Ich denke es ist Hilfe voll.
quelle
Gehen Sie einfach zu project.plist, fügen Sie die Ausrichtung der unterstützten Benutzeroberfläche hinzu und fügen Sie dann nur Portrait (untere Home-Schaltfläche) und Portrait (obere Home-Schaltfläche) hinzu.
Sie können diese Ausrichtung gemäß Ihren Projektanforderungen hinzufügen oder entfernen.
Vielen Dank
quelle
1) Überprüfen Sie Ihre Projekteinstellungen und info.plist und stellen Sie sicher, dass nur die gewünschten Ausrichtungen ausgewählt sind.
2) Fügen Sie Ihrem obersten Ansichts-Controller (Navigations-Controller / Tabbar-Controller) die folgenden Methoden hinzu.
3) Fügen Sie Ihrem App-Delegaten die folgenden Methoden hinzu
quelle
Fügen Sie dies in die .m-Datei von jedem ein, den
ViewController
Sie nicht drehen möchten:Sehen Sie hier für weitere Informationen.
quelle