Se lancer dans le portrait de l'orientation à partir d'un iPhone 6 Plus écran d'accueil en orientation paysage résultats dans le mauvais sens
Le vrai titre de cette question est plus que je peux éventuellement ajustement:
Le lancement d'une application dont la racine-vue-contrôleur prend en charge uniquement le portrait de l'orientation, mais qui, autrement, prend en charge paysage sur un iPhone 6 Plus, tandis que l'écran d'accueil est en orientation paysage résultats dans des limbes de l'état où la fenêtre de l'application est en mode paysage, mais l'appareil est en orientation portrait.
En bref, il ressemble à ceci:
Quand il est censé ressembler à ceci:
Étapes pour Reproduire:
-
iPhone 6 Plus sous iOS 8.0.
-
Une application dont plist prend en charge tous-mais-portrait-upside-down orientations.
-
La vue racine contrôleur de l'application est un UITabBarController.
-
Tout, la barre d'onglet contrôleur et tous ses descendants enfant de voir les contrôleurs de retour
UIInterfaceOrientationMaskPortrait
desupportedInterfaceOrientations
. -
Commencer à iOS écran d'accueil.
-
Tourner en orientation paysage (nécessite un iPhone 6 Plus).
-
Froid-le lancement de l'application.
-
Résultat: broken interface orientations.
Je ne peux pas penser à un autre moyen d'assurer une orientation portrait sauf pour désactiver le paysage au total, dont je ne peux pas faire: notre navigateur web modal vue contrôleurs besoin paysage.
J'ai même essayé de sous-classement UITabBarController et dominante supportedInterfaceOrientations pour retourner le portrait-ne masque, mais cette (même avec toutes les autres étapes ci-dessus) n'a pas résolu le problème.
Voici un lien vers un exemple de projet montrant le bug.
- Avez-vous déposé un bug de radar?
- Justin Miller sur le Forum Apple a suggéré le texte suivant: "Votre propriété des informations de la liste doit préciser les orientations que vous êtes disposé à permettre à votre application de lancement (qui doit correspondre à la pris en charge des orientations de votre premier-vue-contrôleur)."
- J'ai beaucoup aimé la façon dont vous avez posé la question.. je me demandais comment le mettre partout. Merci de sauver ma journée. !!!
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème lors du lancement de notre application en mode paysage sur l'iPhone 6 Plus.
Notre solution était de supprimer paysage pris en charge interface orientations de la plist via les paramètres de projet:
et de mettre en œuvre l'application:supportedInterfaceOrientationsForwindow: le délégué d'application:
Apparemment l'information dans votre plist est de préciser les orientations de votre application est autorisé à lancer pour l'.
return (window == self.window) ? UIInterfaceOrientationMaskAllButUpsideDown : [application supportedInterfaceOrientationsForWindow:window];
Réglage de la
statusBarOrientation
de laUIApplication
semble fonctionner pour moi. Je l'ai placé dans leapplication:didFinishLaunchingWithOptions:
méthode dans l'application délégué.statusBarOrientation
est propriété readonly. Il y a un avertissement de la part de appleSetter for 'statusBarOrientation' was deprecated in iOS 9.0: Explicit setting of the status bar orientation is more limited in iOS 6.0 and later
. Mais c'est le seul moyen de me débarrasser de mon erreur.Cela semble être un bug dans iOS 8 lors de l'utilisation d'un UITabBarController comme une racine de vue-contrôleur. Une solution de contournement consiste à utiliser un surtout de la vanille UIViewController à la racine de vue-contrôleur. Cette vanille-vue-contrôleur sera le parent-vue-contrôleur de votre tab bar controller:
J'ai eu un problème similaire. J'ai voulu forcer le mode portrait partout, sauf pour la lecture des vidéos.
Ce que j'ai fait:
1) pour forcer l'application d'orientation en portrait dans l'AppDelegate:
2) le lancement d'un vide modal-vue-contrôleur résolu le problème dans mon cas.
Je le lance dans le viewDidLoad de la première-vue-contrôleur qui est à la racine de mon NavigationViewController (la première vue contrôleur visible après le lancement de l'application):
S'il vous plaît essayer le code suivant.
Sans doute ce problème causé par la taille de keywindow sur le paysage de lancement.
Pas de chance pour moi, la solution de contournement par Jared à l'aide d'un conteneur générique-vue-contrôleur. Je l'ai déjà sous-classé tab bar controller avec supportedInterfaceOrientations avec pas de chance ainsi. Indépendamment de l'orientation de l'6+ après le lancement de la barre d'onglets de la fenêtre est de déclaration
frame = (0 0; 736 414)
Jusqu'à présent, la seule solution que j'ai trouvé est de forcer le cadre de la fenêtre après makeKeyAndVisible
[self.window makeKeyAndVisible];
self.window.frame = CGRectMake(0, 0, MIN(CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame)), MAX(CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame)));
Je ne veux que mon application pour l'ouvrir en mode paysage (et de ne pas exposer le problème que vous décrivez ci-dessus sur l'iPhone 6 Plus), j'ai donc mis
Landscape (left home button)
etLandscape (right home button)
comme la seule orientations autorisées dans mon application un fichier PLIST. Cette solution résout le problème d'orientation lors de mon application s'ouvre. Cependant, j'ai besoin de mon application de support en mode portrait, pour un point de vue que depuis que je l'affichage d'unUIImagePickerController
dans mon app, Apple exige pour être affiché en mode portrait, sur iPhone.J'ai été en mesure de soutenir portrait pour qu'un point de vue seulement, tout en gardant mon app ouverture en mode paysage, en incluant le code suivant dans
AppDelegate
:J'ai eu le même bug sur mon application, j'ai tout compris avec cette solution
Tout d'abord, il n'a pas fonctionné, mais après quelques dig-je le faire sur le contrôleur initiale après l'écran de démarrage.
Réponse est OjbC langue permettez-moi de le mettre à jour Swift
N'oubliez pas que sur la première vue-contrôleur.
Pour moi-même, j'ai eu le même problème que jaredsinclair, mais sous-classement d'un
UIViewController
avec lesupportedInterfaceOrientations
méthode n'était pas la solution à ce problème. Au lieu de cela j'ai fait exactement ce qu'il a fait dans maappDidFinishLaunching
méthode de monAppDelegate
et ajouté monUITabBarController
comme un enfant normalUIViewController
plutôt que de son sous-classe, et cela a fonctionné!Je suis dans la même situation, et de faire [self.fenêtre setFrame:...] ne fonctionne pas pour moi.
Adjonction, à la fin de l'application:didFinishLaunchingWithOptions est la seule chose que j'ai trouvé qui fonctionne. Il rend l'écran clignote et n'est pas très propre et efficace.
J'ai ajouté ceci à la fin de la demande:didFinishLaunchingWithOptions:
J'ai eu le même problème avec mon application fonctionne à la fois en mode paysage et portrait avec une UITabBarController en tant que root-vue-contrôleur.
Chaque fois que l'application a été lancée qu'en mode Paysage, la vue était incorrecte.
Tout ce que j'avais à faire:
- supprimer rootview assignation de contrôleur dans le XIB.
- Ajouter manuellement dans une fois que l'application est lancée:
(void)applicationDidFinishLaunching:(UIApplication *)application {
application.statusBarHidden = OUI;
[self.fenêtre setRootViewController:auto.tabBarController];
Qui a résolu le problème.
Seulement de Supprimer Tous les éléments dans la prise en charge de l'interface de l'orientation à l'exception de ce que vous voulez (j'ai besoin seulement d'Portrait) en info.plist , il va travailler pour moi
appelez simplement
[application setStatusBarOrientation:UIInterfaceOrientationPortrait d'animation:N];
dans délégué d'application de la méthode
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
en fait l'appareil est maintenant UIInterfaceOrientationPortrait après le Lancement ,si vous touchez une inputField ,le clavier est la disposition de portrait