Как заставить портретную ориентацию?

Как принудительно установить портретную ориентацию в iOS 7, если мое приложение изначально поддерживается для обеих ориентаций?


person user3664548    schedule 22.05.2014    source источник
comment
Не ясно, можете ли вы объяснить больше. Вам нужен только портретный режим во всем приложении?   -  person Gajendra Rawat    schedule 22.05.2014


Ответы (3)


Для всего приложения откройте файл проекта, перейдите на вкладку Общие, измените настройки:

введите здесь описание изображения

Или непосредственно в файле Info.plist:

введите здесь описание изображения

Если вы хотите это только на определенном контроллере представления, переопределите supportedInterfaceOrientations:

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

Подробнее о втором методе можно прочитать на официальном сайте . Документация по UIViewController. Возможно, вы найдете более подходящий способ для вашей конкретной проблемы.

person rtiago42    schedule 22.05.2014
comment
Просто и правильно, но позаботьтесь о методе -(BOOL)shouldAutorotate. Его нельзя переопределять или возвращать YES, иначе он не будет работать. - person Moose; 28.12.2014

Используйте следующий подход: в вашем приложении делегируйте .h

@interface PlayWithWSWithLibAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {

       BOOL flagOrientationAll;
}

@property (assign) BOOL flagOrientationAll;

Добавьте следующий метод в файл делегата приложения .m.

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    //NSLog(@"PlayWithWSWithLibAppDelegate -- supportedInterfaceOrientationsForWindow");
    if(flagOrientationAll == YES){
        return UIInterfaceOrientationMaskPortrait;
    } else {
        return UIInterfaceOrientationMaskAll;
    }
}

Реализуйте в своем представлении следующий способ, который вы хотите повернуть как в портретной, так и в альбомной ориентации как для устройства iPhone.

-(void)viewWillAppear:(BOOL)animated
{
    self.tabBarController.delegate = self;

    PlayWithWSWithLibAppDelegate *delegate = (PlayWithWSWithLibAppDelegate *) [[UIApplication sharedApplication] delegate];
    delegate.flagOrientationAll = YES;
 }
}

-(void)viewWillDisappear:(BOOL)animated
{
    //NSLog(@"viewWillDisappear -- Start");
     PlayWithWSWithLibAppDelegate *delegate = (PlayWithWSWithLibAppDelegate *)[[UIApplication sharedApplication] delegate];
        delegate.flagOrientationAll = NO;
}

Вот моя тема, похожая на вашу проблему: Ориентация интерфейса iOS 7

person Rigel Networks    schedule 22.05.2014

person    schedule
comment
Может этот код не соответствует стандарту Apple, не уверен... Но это хороший хак. - person Rigel Networks; 22.05.2014
comment
Когда мы используем этот код, наше приложение не будет одобрено Apple для производства. - person Prabhu Natarajan; 22.05.2014
comment
Можете ли вы объяснить, почему это работает, пожалуйста? Кроме того, эти методы устарели в iOS 6. Вполне возможно, что Apple решит удалить их в iOS 8. Это будет не первый случай, когда Apple объявляет устаревшим метод и вскоре после этого удаляет его. - person rtiago42; 22.05.2014
comment
@PrabhuNatarajan, как вы можете сказать, что оно будет отклонено Apple, где вы найдете такое заявление - person Pawan Rai; 22.05.2014
comment
Не работает на iOS 8 - person Tomer Even; 18.08.2014
comment
эффект мерцания возникает в ios 8. - person Mihir Oza; 13.08.2015