Отключить автоповорот на одном UIViewController, который не работает в iPad Pro

Я хочу заблокировать один контроллер просмотра на iPhone и iPad. Этот приведенный ниже код отлично работает в iPhone 4,5,6, iPad, iPad 2, сетчатке iPad. Но не работает в iPad Pro.

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

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

Этот приведенный выше код написан в моем контроллере представления, какой контроллер представления я не хочу вращать.


person Monika Patel    schedule 22.03.2016    source источник
comment
Что такое версия iOS на iPad pro   -  person Chetan    schedule 22.03.2016
comment
Никогда не пытайтесь переопределить методы с помощью категории. Это неопределенное поведение.   -  person rmaddy    schedule 22.03.2016
comment
Я попробовал решение ниже, но оно не работает @Chetan   -  person Monika Patel    schedule 22.03.2016
comment
Пожалуйста, проверьте этот URL-адрес stackoverflow.com/questions/35794712/ Это может вам помочь   -  person iamVishal16    schedule 22.03.2016


Ответы (2)


Напишите этот код ниже в контроллере представления, какой контроллер представления вы хотите заблокировать в портретном режиме.

@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;
}

А теперь сделайте это ниже изменений в файле plist введите здесь описание изображения

person Monika Patel    schedule 22.03.2016
comment
Благодарю вас! Я думал, что перепробовал все. Установите правильные флажки в информации о проекте, проверьте полноэкранный режим, переопределив правильные методы. Их даже вызывали. Я решил проблему, зайдя в info.plist и удалив ориентацию для iPad. Глупо, что они не отображаются в информации о проекте для универсального проекта. - person VaporwareWolf; 13.07.2017

Напишите это в своем контроллере представления, который вы не хотите вращать

Это предотвратит любое вращение.

Класс контроллера представления, который вы не хотите вращать, должен иметь это.

- (BOOL)shouldAutorotate
{
    return NO;
}

The containing navigation controller class should have this.

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

Это будет вращаться только в портрет

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}
person Chetan    schedule 22.03.2016
comment
Не объявляйте оба метода в контроллере представления. Один должен быть объявлен в контроллере представления, а другой - в классе контроллера навигации. Прочтите ответ еще раз - person Chetan; 22.03.2016