J'ai une application configurée via le fichier plist pour prendre en charge les orientations portrait, paysage gauche et paysage droit (c'est-à-dire UISupportedInterfaceOrientations a la valeur UIInterfaceOrientationPortrait, UIInterfaceOrientationLandscapeLeft et UIInterfaceOrientationLandscapeRight). Mais j'ai limité les orientations prises en charge à un portrait dans un contrôleur de vue. Si je présente une feuille UIActionSheet sur la vue du contrôleur de vue, puis que je fais pivoter le périphérique, la feuille UIActionSheet effectue une rotation vers la nouvelle orientation. Cela se produit uniquement sur les appareils exécutant iOS 8 (GM Seed).
Je voudrais que UIActionSheet respecte les règles du contrôleur de vue contenant et ne tourne pas. Pensées?
Je ne veux pas que cela se produise: capture d'écran http://oi58.tinypic.com/20tgto2.jpg
Exemple de code UIViewController:
- (IBAction)onTouch:(id)sender
{
UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle:@"hi"
delegate:nil
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"Open", nil];
[actionSheet showInView:self.view];
}
#pragma mark - Rotation methods
- (BOOL)shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
A été informé que UIAlertController remplace UIActionSheet dans iOS 8.
"La nouvelle classe UIAlertController remplace les classes UIActionSheet et UIAlertView comme moyen privilégié d’affichage des alertes dans votre application."
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"hi"
message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
[alertController addAction:[UIAlertAction actionWithTitle:@"Open"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
// open something
}]];
[alertController addAction:[UIAlertAction actionWithTitle:@"Cancel"
style:UIAlertActionStyleCancel
handler:nil]];
[self presentViewController:alertController animated:YES completion:nil];
Voici ma solution de contournement basée sur la solution de Busrod avec quelques modifications car j'ai eu quelques problèmes dans UIActionSheet lors de l'utilisation de sa solution de contournement:
-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
UIViewController *presentedViewController = window.rootViewController.presentedViewController;
if (presentedViewController) {
if ([presentedViewController isKindOfClass:[UIActivityViewController class]] || [presentedViewController isKindOfClass:[UIAlertController class]]) {
return UIInterfaceOrientationMaskPortrait;
}
}
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}
Ajout à la réponse de @ user3750435
Puisque le PO a défini les masques de rotation qu'il/elle veut dans le Info.plist
, nous n'avons pas besoin de redéfinir les masques ici. UIApplication peut nous retourner ces masques via supportéInterfaceOrientationsForWindow: . Donc, la méthode peut être simplifiée comme ceci:
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
UIViewController *presentedViewController = window.rootViewController.presentedViewController;
if (presentedViewController) {
if ([presentedViewController isKindOfClass:[UIActivityViewController class]] || [presentedViewController isKindOfClass:[UIAlertController class]]) {
return UIInterfaceOrientationMaskPortrait;
}
}
return [application supportedInterfaceOrientationsForWindow:window];
}
- application (NSUInteger): (UIApplication *) application soutenueInterfaceOrientationsForWindow: (UIWindow *) fenêtre {
UIViewController *presentedViewController = window.rootViewController.presentedViewController;
if (presentedViewController) {
if ([presentedViewController isKindOfClass:[UIActivityViewController class]] || [presentedViewController isKindOfClass:[UIAlertController class]]) {
return UIInterfaceOrientationMaskPortrait;
}
}
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}
merci cela a fonctionné pour moi