Подтвердить что ты не робот

Поддержка iOS 9 не работает

У меня есть UIViewController со следующим кодом:

- (BOOL) shouldAutorotate {
     return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationPortrait;
}

Я не использую UINavigationController. Когда этот UIViewController отображается, устройство все равно будет поворачиваться в альбомное. Я нацелен на iOS 9, что здесь проблема?

4b9b3361

Ответ 1

Итак, проблема заключалась в том, что я определил разрешенные ориентации в info.plist, который, по-видимому, переопределяет все, что вы делаете где-либо еще во всем проекте.

Чтобы исправить проблему, я удалил записи из info.plist и определил их в настройках проекта. Теперь все работает так, как ожидалось.

Ответ 2

Я не думаю, что ответ Брайана работает, поскольку изменение ориентации в настройках проекта также изменяет info.plist по комментариям @mrhangz.

Если проблема только в iOS9, возможно, это связано с новой функцией iOS9 в iPad под названием Split view. iOS9 включает Split view по умолчанию, в частности, iPad-устройство, см. документы Apple .

введите описание изображения здесь Split view заставил ваше приложение поддерживать все ориентации во всех представлениях после их принятия. Поэтому, если вы установите поддержку всех ориентаций в настройках info.plist или цели общего назначения, а затем Split view поддерживается по умолчанию, что будет игнорировать настройку ориентации хотя supportedInterfaceOrientations в вашем viewController и поддерживает все ориентации.

Как указано в документе, если вы отметили Requires full screen в своих целевых настройках, ваше приложение не будет поддерживать Split view. Теперь вы можете снова контролировать ориентацию кода. введите описание изображения здесь

Ответ 3

Я попробовал много решений, но правильный ответ с рабочим решением:

ios 8 и 9, нет необходимости редактировать файл info.plist.

- (BOOL) shouldAutorotate {
 return NO;
 }   



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

возможная ориентация

UIInterfaceOrientationUnknown

Ориентация устройства не может быть определена.

UIInterfaceOrientationPortrait

Устройство находится в портретном режиме, при этом устройство удерживается в вертикальном положении и кнопка дома внизу.

UIInterfaceOrientationPortraitUpsideDown

Устройство находится в портретном режиме, но вверх ногами, при этом устройство удерживается в вертикальном положении и кнопка дома вверху.

UIInterfaceOrientationLandscapeLeft

Устройство находится в ландшафтном режиме, при этом устройство удерживается в вертикальном положении и кнопка "Дом" с левой стороны.

UIInterfaceOrientationLandscapeRight

Устройство находится в ландшафтном режиме, при этом устройство удерживается в вертикальном положении и кнопка "домой" с правой стороны.

Ответ 4

Свифт 5

Приведенный ниже код блокирует текущий контроллер вида в портретном режиме, но все же позволяет другим контроллерам вида переходить в альбомную ориентацию. Я действительно считаю, что вы должны включить все ориентации на уровне проекта, а затем отключить и затем "выключить", используя этот метод, но я не уверен, есть ли способ включить их снова "включено" один за другим.

private var _orientations = UIInterfaceOrientationMask.portrait
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    get { return self._orientations }
    set { self._orientations = .portrait }
}

Более подробное объяснение всего этого можно найти здесь: Метод supportInterfaceOrientations не переопределяет ни один метод из своего суперкласса

Ответ 5

Для простоты, для iPad, если свойство Поддерживаемые интерфейсные ориентации (iPad) в info.plist включает все четыре ориентации, при значении свойства UIRequiresFullScreen, равном НЕТ, iOS будет рассматривать ваше приложение как поддерживающее разделенное представление. Если приложение поддерживает функцию разделения просмотра, вы не можете отключить его вращение, по крайней мере, указанными выше способами.

У меня есть подробный ответ здесь.