Невозможно повернуть ориентацию интерфейса к портрету вверх ногами

Как на симуляторе iPhone, так и на iPhone 3GS (iOS 6) я не могу установить ориентацию портрета вверх ногами. У меня есть только один ViewController. Я добавил этот код в нем:

-(BOOL) shouldAutorotate{
 return YES; 
}

-(UIInterfaceOrientation) preferredInterfaceOrientationForPresentation{
 return UIInterfaceOrientationPortraitUpsideDown;
}

- (NSUInteger)supportedInterfaceOrientations{
 return UIInterfaceOrientationPortrait | UIInterfaceOrientationPortraitUpsideDown;
}

-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
  if (toInterfaceOrientation==UIInterfaceOrientationPortrait || toInterfaceOrientation==UIInterfaceOrientationPortraitUpsideDown) {
    return YES;
  }
 return NO;
}

Я также добавил это в AppDelegate.m:

-(NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    return UIInterfaceOrientationPortrait | UIInterfaceOrientationPortraitUpsideDown;
}

Я также проверил файл plist, обе ориентации присутствуют там. На моей раскадровке в Simulated Metrics Orientation установлено значение Inferred. Я ничего не делаю в своем приложении DidFinishLaunchingWithOptions, кроме возврата YES. Я только что добавил UIImageView внутри этого ViewController. Можно ли заставить эту ориентацию работать?

3 ответа

Решение

supportedInterfaceOrientations возвращает NSUInteger, Он возвращает все ориентации интерфейса, которые поддерживает контроллер представления, маску значений ориентации интерфейса.

Вам необходимо вернуть значения, определенные в UIInterfaceOrientationMask Enum, как показано ниже:

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown);
}

Я знаю, что есть ответ, который сработал, но для всех, кто все еще сталкивается с той же проблемой:

У меня была похожая проблема, которая была связана с Xcode: ротация портрета не поддерживалась, несмотря на возвращение YES в - (BOOL) shouldAutorotateToInterfaceOrientation: для всех случаев. Оказалось, что в итоговом окне редактора проекта моей цели включены "Поддерживаемые ориентации интерфейса":

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

Вышеуказанные пункты "Информация о развертывании iPhone / iPad" не делали этого, а раздел "Информация о развертывании iPad", по-видимому, контролировал действия симулятора, несмотря на то, что я использовал только симулятор iPhone. После того, как я включил ту же ориентацию в этом разделе, симуляция iPhone работала, и я смог проверить, что произошло, когда симулятор вращался....

Я перепробовал много способов для этого. Кажется, это работает только одним способом, но глобально через приложение, а не только для конкретного контроллера представления.

Во-первых, вы должны проверить перевернутую ориентацию устройства в общих настройках цели.

проверьте перевернутую ориентацию устройства

Затем в расширении контроллера навигации вы переопределяете supportedInterfaceOrientations метод

extension UINavigationController {
    override public func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        return .All
    }
}
Другие вопросы по тегам