Comment permettre à une seule UIViewController pour faire tourner à la fois Paysage et Portrait de direction?
Mon application est seulement pour iphone
appareil (iphone 4 et 5) et construit à l'appui de seulement ios 6
.
Mon ensemble de l'application prend en charge uniquement portrait
mode. Mais il y a une vue appelée "ChatView
" , que je tiens à soutenir à la fois landscape
et portrait
modes.
J'ai mis l'appareil requis rotations comme suit -
J'ai également essayé le code suivant à l'appui de la rotation dans "ChatView" -
-(BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
Mais il ne pouvait pas faire tourner ce point de vue.
J'ai beaucoup cherché pour cela , mais pourrait ne pas être en mesure de trouver la solution à mon problème.
Et aussi dans "ChatView" il y a certains objets comme des boutons, des objets textfield dont les cadres sont mis programmaticaly. Donc, je veux savoir ce que je devrais avoir à définir des cadres de tous ces objets pour le mode paysage aussi?
S'il vous plaît aider moi.
Merci.....
- Vous pouvez vous référer à ceci : stackoverflow.com/questions/12772749/...
- si votre application a manette de navigation, alors il ne sera pas possible d'avoir une seule vue comme paysage.
- votre rootviewcontroller est UINavigationController
- il est possible d'avoir une seule vue comme paysage
- stackoverflow.com/questions/14989353/... essayez ceci
- vérifier mon démo pour réaliser ce type de fonctionnalité ,dropbox.com/s/lrsz4dpeolpeu23/RotationDmeo.zip
- est ur Application de navigation est basé sur contrôleur ? J'ai eu la même exigence et de l'avoir fait comme ça.
- oui. app de navigation est basé sur contrôleur. Comment avez-vous le résoudre?
Vous devez vous connecter pour publier un commentaire.
Je pense que si vous voulez le support de l'un viewcontroller de rotation, il n'est pas possible depuis l'application permettra de suivre les orientations définies par vous dans
.plist
fichier. Un autre vous pouvez suivre est à l'appui de votre application à la fois paysage et portrait, le gel de toutes viewcontrollers la rotation portrait sauf pour l'affichage de la discussion.MODIFIER
À la sous-classe
UINavigationController
, créer un nouveau fichier avec un nom par exempleCustomNavigationController
et de la faire sous-classe deUINavigationController
..h fichier
.m fichier
Définir la classe de votre
UINavigationController
dans votre classe principale xib commeCustomNavigationController
. Espérons que cela aide ypu..navController.viewControllers = [NSArray arrayWithObjects:viewController, nil]; self.window.rootViewController=nav3;
Landscape
mode? Ce que je peux voir, c'est que vous n'soutienPortrait
...Simple, mais il fonctionne très bien. IOS 7.1 et 8
AppDelegate.h
AppDelegate.m
ViewController
viewDidLoad
Votre vue-contrôleur ne sera jamais tourner à n'importe quelle position qui n'est pas pris en charge par l'application elle-même. Vous devrait permettre à tous les possibles rotations et puis à la vue des contrôleurs qui ne sont pas censés faire pivoter mettre les lignes suivantes
Dans ChatView, il convient de:
Si vous avez besoin de modifier votre mise en page après une rotation, vous devriez mettre en œuvre les modifications appropriées à vos sous-vues dans
Utilisation
self.view.bounds
pour vérifier la taille actuelle de laview
, depuisself.view.frame
ne change pas après les rotations.pour les
viewcontroller.m
vous souhaitez faire pivoterajouter cette méthode:
puis à l'intérieur de votre
AppDelegate.m
Ted réponse fonctionne bien avec le problème mentionné par Alexandre de la Norvège.
Mais j'ai pensé que le problème ne se passent pas de la façon dont Alexandre a expliqué,
En fait, quand ViewController B qui est actuellement en paysage (Toutes les orientations activé) renvoie à Un ViewController (Portrait uniquement) une fois que l'utilisateur clique sur le bouton de retour, Appdelegate
est appelé. Mais toujours en vue de la racine contrôleur est ViewController B (que la rotation activé-vue-contrôleur), ViewController Un n'est pas de revenir à l'orientation portrait, depuis ViewController B est encore de retour
Ainsi, lorsque vous appuyez sur le bouton de retour de retour, "shouldAutorotate -> PAS de" dans ViewController B. Puis ViewController viendra à l'orientation Portrait. C'est ce que j'ai fait
Swift 3 Casher Version
J'ai laissé ici juste pour le cas où quelqu'un a le problème.
La documentation d'Apple pour
supportedInterfaceOrientations
dit:En quelques mots, vous devez remplacer les
supportedInterfaceOrientations
en vue de la racine de contrôleur pour qu'il renvoie la valeur pour ses enfants-vue-contrôleur et la valeur par défaut contraire.Ce que vous devez faire est de vérifier si l'application prend en charge tous les modes (aller au Déploiement de l'info dans les objectifs Généraux des paramètres ou des Infos.plist), trouver la classe racine de votre vue-contrôleur. Il peut être générique UIViewController, UINavigationController, UITabBarController ou certaines classe personnalisée. Vous pouvez le vérifier de cette façon:
Ou de toute autre manière que vous voulez.
De laisser certains
CustomNavigationController
. Si vous devez remplacersupportedInterfaceOrientations
comme ceci:Dans n'importe quelle vue contrôleur qui devrait soutenir uniquement orientation portrait par exemple remplacer
supportedInterfaceOrientations
de cette façon:Alors n'oubliez pas de vérifier si
shouldAutorotate
de vous la racine de vue-contrôleur et supérieur présentés vue-contrôleur retourne déjàtrue
. Si non, ce ajouter de définitions de classes:Sinon
supportedInterfaceOrientations
sera ni être appelé à à tous.Ici vous allez!
Si vous avez besoin pour résoudre le problème inverse, lorsque l'un view controller devrait soutenir un tas d'orientations et d'autres ne le font pas, faire cela change à chaque vue-contrôleur, mais celui-ci.
Espère que cela aidera.
Basé sur @iAnum réponse, j'ai activé la rotation automatique et UIViewController classe de détection.
C'est parce que, sinon, la transition dans et hors de la vue contrôleur" n'est pas correct pour l'orientation portrait, et vous serez coincé dans un rapport d'orientation.
Je n'avais qu'une vue soutien de paysage, alors je l'ai codé en dur dans la navigation personnalisée-vue-contrôleur:
Il y a un problème de claquement VCs discuté ici https://stackoverflow.com/a/15057537/1277350 où appuyant sur la touche back alors que le paysage n'aurez même pas l'appel de l'orientation de méthodes, de sorte que vous avez à bidouille un peu en montrant et en les rejetant une vue modal.
Et puis souvenez-vous que si vous voulez willShowViewController à feu, vous devez configurer soi-même.delegate = self et ajouter le UINavigationControllerDelegate personnalisé de navigation controller avec le code ci-dessous.
faire une sous-classe de UINavigationController comme suit:
MyNavigationController.h
MyNavigationController.m
en supposant que votre viewcontroller est nommé: ServicesVC
Voici la réponse d'Alexandre (https://stackoverflow.com/posts/25507963/revisions) dans Swift:
En outre, vous aurez besoin d'ajouter de l'extrait de code suivant dans AppDelegate.swift:
Et pour ViewControllers pour lequel vous souhaitez autoriser tous les rotations, ajoutez cette fonction:
Je ne suis pas sûr au sujet de l'histoire de cette question (maintenant = iOS 10 calendrier), mais la solution la plus simple est manquante comme je l'ai posté ce dans Oct. 2016.
En supposant que vous voulez ce:
UINavigationController
s dans XIBs/Plumes/Storyboards sans avoir rien à faire pour eux... puis (OMI), la solution la plus simple est de faire un UINavigationControllerDelegate, PAS de sous-classe UINavigationController (ce qui viole l'hypothèse 4 ci-dessus).
Lorsque j'ai résolu ce problème, j'ai décidé de faire mon premier
ViewController
unUINavigationControllerDelegate
. Ce point de vue contrôleur définit lui-même comme la manette de navigation du délégué, et renvoie les orientations sont autorisés. Dans mon cas, le défaut est que toutes les orientations sont acceptés, avec portrait préféré, mais dans un cas particulier, seulement le portrait est autorisé. Le Code ci-dessous est de Swift 3 /XCode 8:J'ai eu la même situation. J'ai donc sous-classé UINavigationController en CustomNavigationController, et à l'intérieur de ce CustomNavigationController, j'ai écrit
J'ai utilisé ce CustomNavigationController à la place de l'existant NavigationController.
Puis à l'intérieur de la vue-contrôleur que vous avez à l'écran en Orientation Paysage dire LandScapeView, j'ai écrit
À l'intérieur de CustomNavigationController, j'ai présenté ce point de vue contrôleur, pas poussé vers la Pile de Navigation. Ainsi, le LandScapeView est apparu en Orientation Paysage.
Je n'ai pas changer quoi que ce soit dans le pris en charge Interface Orientation dans les Paramètres de Projet.
//collez cette méthode en application deligate classe
Si l'Application est l'appui de IOS7 à IOS9 utiliser ce code pour l'Orientation:
Je sais que cette question est très ancienne mais Elle a besoin d'une mise à jour de réponse. La méthode la plus simple et la plus correcte pour parvenir à ce résultat est de permettre Portrait et du Paysage dans les paramètres de votre app. Ensuite, ajoutez ce code à votre délégué d'application:
N'oubliez pas de remplacer "INSERTYOURVIEWCONTROLLERHERE" avec votre point de vue contrôleur.