shouldAutorotateToInterfaceOrientation ne fonctionne pas
-
01-10-2019 - |
Question
J'ai écrit ma demande universelle en mode portrait, et maintenant, après environ 15 fichiers nib, beaucoup, beaucoup viewCotnrollers, Je voudrais mettre en œuvre le shouldAutorotateToInterfaceOrientation et concevoir des écrans en mode paysage.
ajouter:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
à tous mes viewControllers, ne fait pas le travail.
Au cours de débogage, je vois que cette méthode est appelée, mais ça ne marchera pas! pas dans le simulateur, et non dans le dispositif, pas Iphone, Ipad pas!
J'ai cherché des réponses dans le forum, et a vu quelques-uns conseille d'utiliser:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait ||
interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
interfaceOrientation == UIInterfaceOrientationLandscapeRight ||
interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown );
}
N'a pas fonctionné non plus,
ajouter:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
et
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
à mon viewDidLoad et viewDidUnload ne respectivement pas travaillé non plus.
Je suis perdu .. Toute aide fera!
juste une information ... toutes mes vues sont de type UIControl, comme je l'avais besoin TuchUpInside au travail.
appriciate votre aide.
La solution
Assurez-vous que toutes vos vues parents ont autoresizesSubviews = OUI. Vous devrez peut-être de le faire dans le code si vous avez des ressorts et des entretoises non défini dans IB pour toutes vos vues.
Guide de l'Citant Interface Builder utilisateur:
Important: Dans un fichier nib Cocoa, si vous ne fixent pas de ressorts ou d'entretoises pour votre point de vue dans Interface Builder, mais puis faire utiliser le setAutoresizingMask: méthode pour ajouter un comportement à redimensionnement automatique exécution, votre point de vue peut toujours pas présentent la Autoresizing correcte comportement. La raison est que l'interface Constructeur d'un redimensionnement automatique désactive Les enfants de vue parent en tout cas ces enfants ont pas de ressorts et ensemble entretoises. Pour activer le redimensionnement automatique nouveau comportement, vous devez passer à OUI les setAutoresizesSubviews: méthode de la vue parent. En faisant cela, le vues enfants devraient autoSize correctement.
Un couple d'autres choses à prendre en compte:
-
A UINavigationController n'autorotation si son contrôleur de vue racine est également réglé sur autorotation.
-
A UITabBarController n'autorotation si sont mis à autorotation tous ses contrôleurs de vue.
Autres conseils
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
UIInterfaceOrientation des=self.interfaceOrientation;
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) //iPad
{
if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)//ipad-portairait
{
}
else//ipad -landscape
{
}
}
else//iphone
{
UIInterfaceOrientation des=self.interfaceOrientation;
if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown) //iphone portrait
{
}
else //iphone -landscape
{
}
}
return YES;
}
Quelle construction iOS sont-vous? Il a été dépréciée dans iOS 6.0. (Vous devez remplacer les supportedInterfaceOrientations et méthodes preferredInterfaceOrientationForPresentation à la place.)
Vous pouvez également appeler shouldAutorotate sur la classe UIViewController:
Assurez-vous que vous avez vérifié les prises en charge dans l'interface Orientations sur l'onglet « Estival » des paramètres du projet (Sélectionnez le nom du projet dans le au sommet « Navigator Project »).
Si vous ne l'avez pas sélectionné les orientations que vous souhaitez utiliser ici, le simulateur / iPhone ne permettra pas à l'écran à l'orientation du changement.
J'ai eu ce problème, mais cela a fonctionné dans iOS6 mais pas iOS5. Il se trouve que j'avais une vue dans mon story-board que je ne l'avais pas fait une classe viewcontroller pour encore.
... et last but not least, assurez-vous que vous ne l'avez pas activé le réglage « Portrait Orientation verrouillé » sur votre appareil de test (bien sûr ne pas appliquer au simulateur), cela désactive la rotation dans toutes les applications non la matière que revient shouldAutorotateToInterfaceOrientation
.