Принуждение ландшафта и авторотации в iOS 7

Мое приложение должно быть только ландшафтом, и у меня не было никаких проблем с этим при создании iOS 6 и ранее. Теперь с iOS 7, он не будет вращаться вообще.

В настройках моего приложения у меня он установлен только влево/вправо. На мой взгляд, контроллер, я использую следующее:

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
}

Я также использовал это, которое теперь устарело:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation {
    return UIInterfaceOrientationIsLandscape(orientation);
}

Новый, похоже, должен быть Autorotate, но с помощью этого происходит сбой моего приложения. Любые идеи по этому поводу будут оценены, поскольку мое приложение вынуждено писать на моем iPad и в симуляторе. Спасибо!

Ответ 1

Это решает мою проблему. Я не уверен, почему у меня были проблемы раньше, но я, должно быть, пропустил попытку этой точной комбинации (также, info.plist должен иметь поддерживаемые ориентации).

(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

(BOOL)shouldAutorotate {
    return YES;
}

edit: Возможно, у меня возникли проблемы с симулятором, а выполнение reset/restart и clean могло помочь в исправлении.

Ответ 2

Включите этот метод и в свой код:

- (BOOL)shouldAutorotate{
  if([[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeLeft ||[[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeRight)
  {
    return YES;
  }
  else{
    return NO;
  }
}

Прочтите этот для получения дополнительной информации. Здесь упоминается, что мы должны переопределить shouldAutorotate для подавления ориентации.

Если вы хотите временно отключить автоматическое вращение, избегайте манипулируя масками ориентации для этого. Вместо этого переопределите shouldAutorotate на верхнем контроллере. Этот метод перед выполнением любой авторотации. Если он возвращает NO, тогда вращение подавляется.

Ответ 3

Я не знаю почему, но эта работа для меня на IOS 7

[[UIApplication sharedApplication] setStatusBarHidden:NO];

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];

[super willRotateToInterfaceOrientation:UIInterfaceOrientationPortrait duration:0];

Ответ 4

У меня могут возникнуть проблемы с симулятором, и я делаю reset/restart и чистая, возможно, способствовала исправлению.

Это сработало для меня: (Симулятор → Reset Содержание и настройки...)