Как заставить мой контроллер представления всегда открываться в портретном режиме

У меня есть два контроллера представления, встроенные в контроллер навигации. Моему первому контроллеру представления разрешено вращаться, тогда как мой второй контроллер представления всегда должен открываться в портретном режиме. Например, даже если я нахожусь в ландшафтном режиме в первом контроллере представления, я хочу открыть свой второй только в портрете,

Я представляю второй контроллер представления, нажимая переход от первого.


person Avinash Sharma    schedule 13.04.2016    source источник
comment
Возможный дубликат , как заставить контроллер вида оставаться в портретной ориентации режим?   -  person Ronak Chaniyara    schedule 13.04.2016
comment
Возможный дубликат Как заставить UIViewController портировать ориентация в iOS 6   -  person kb920    schedule 13.04.2016


Ответы (4)


Вам придется реализовать shouldAutorotate на втором VC

Непосредственно перед тем, как вы представите второй звонок VC (портрет)

 if([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft || [UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight) {
        [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger: UIInterfaceOrientationPortrait] forKey:@"orientation"];
 }
person Sean Lintern    schedule 13.04.2016

Вы можете использовать этот метод в своем классе AppDelegate для и поддерживать с помощью bool var

-(NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    if(self.isDisplayInPoratrait){ 
        return UIInterfaceOrientationMaskPortrait;
    else
        // return ur required orientation
}

self.isDisplayInPoratrait - переменная bool, объявленная в AppDelagate, установите эту переменную да в классе, который вы хотите представить в портрете. Поместите этот метод в класс, который вы хотите представить в портрете.

-(BOOL)shouldAutorotate {
   return NO;
}

-(UIInterfaceOrientationMask)supportedInterfaceOrientations {
   return  UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {  
   return UIInterfaceOrientationLandscapeLeft;
}
person Hardik Baldha    schedule 13.04.2016

Решение 1. Создайте собственный подкласс UINavigationController и переопределите эти методы следующим образом:

@interface LockedNavigationViewController ()

@end

@implementation LockedNavigationViewController

-(BOOL)shouldAutorotate {
    return UIInterfaceOrientationMaskPortrait;
}

#if __IPHONE_OS_VERSION_MAX_ALLOWED < 90000
- (NSUInteger)supportedInterfaceOrientations
#else
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
#endif
{
    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

@end
person Dinesh    schedule 13.04.2016

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

Выберите свой проект -> общие, затем следуйте приведенному выше изображению.

person I'm a Learner    schedule 13.04.2016