2016-03-22 4 views
1

Je veux verrouiller singlecontroller dans iPhone et iPad. Ce code ci-dessous fonctionne parfaitement dans l'iPhone 4,5,6 iPad, iPad 2, iPad rétine. Mais ne fonctionne pas dans l'iPad pro.Désactiver autorotate sur un seul UIViewController ne fonctionne pas dans l'iPad Pro

@implementation UINavigationController (Orientation) 
-(NSUInteger)supportedInterfaceOrientations 
{ 
     return [self.topViewController supportedInterfaceOrientations]; 
} 

-(BOOL)shouldAutorotate 
{ 
    return YES; 
} 
@end 

Ce code ci-dessus est écrit dans mon contrôleur de vue dont le contrôleur de vue que je ne veux pas faire pivoter.

+0

Qu'est-ce que la version iOS sur iPad pro – Chetan

+0

Ne tentez jamais de remplacer les méthodes utilisant une catégorie. C'est un comportement indéfini. – rmaddy

+0

@Chetan iOS 9.1 –

Répondre

2

Notez ce ci-dessous le code dans le contrôleur de vue, qui vue contrôleur u voulez verrouiller en mode portrait

@implementation UINavigationController (Orientation) 
-(NSUInteger)supportedInterfaceOrientations 
{ 
     return [self.topViewController supportedInterfaceOrientations]; 
} 

-(BOOL)shouldAutorotate 
{ 
    return YES; 
} 
@end 

#pragma mark Orientation 
-(BOOL)shouldAutorotate 
{ 
    [super shouldAutorotate]; 
    return NO; 
} 
-(NSUInteger) supportedInterfaceOrientations { 
    [super supportedInterfaceOrientations]; 
    // Return a bitmask of supported orientations. If you need more, 
    // use bitwise or (see the commented return). 
    return UIInterfaceOrientationMaskPortrait; 
    // return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown; 
} 

- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation { 
    [super preferredInterfaceOrientationForPresentation]; 
    // Return the orientation you'd prefer - this is what it launches to. The 
    // user can still rotate. You don't have to implement this method, in which 
    // case it launches in the current orientation 
    return UIInterfaceOrientationPortrait; 
} 

Et maintenant le faire ci-dessous changements dans votre plist fichier enter image description here

+0

Merci! Je pensais avoir tout essayé. Cochez les cases à droite sur les informations du projet, en plein écran, en remplaçant les bonnes méthodes. Ils étaient même appelés. J'ai corrigé le problème en allant dans info.plist et en supprimant les orientations pour iPad. Silly qu'ils ne sont pas affichés sur les informations du projet pour un projet universel. – VaporwareWolf

+0

@VaporwareWolf Super !!! si ma réponse est d'aider à u alors pls upvote ma réponse –

1

écrire dans votre contrôleur de vue que vous ne voulez pas tourner

Cela permettra d'éviter toute rotation.

La classe de contrôleurs de vue que vous ne voulez pas faire pivoter devrait l'avoir.

- (BOOL)shouldAutorotate 
{ 
    return NO; 
} 

The containing navigation controller class should have this. 

- (BOOL)shouldAutorotate 
{ 
    return [self.topViewController shouldAutoRotate]; 
} 

Cela ne tourne à portrait

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 
+0

Cette solution ne fonctionne pas. –

+0

vérifiez la modification et essayez la même chose – Chetan

+0

Ne pas déclarer les deux méthodes dans le contrôleur de vue. L'un doit être déclaré dans la vue Contrôleur et l'autre dans la classe Contrôleur de navigation. Lisez la réponse à nouveau – Chetan