Как отключить ландшафтную ориентацию?
Я создаю приложение для iPhone, и мне нужно, чтобы он был в портретном режиме, поэтому, если пользователь перемещает устройство вбок, он не поворачивается автоматически. Как я могу это сделать?
Ответы
Ответ 1
Чтобы отключить ориентации для определенного контроллера просмотра, вы должны теперь переопределить supportedInterfaceOrientations
и preferredInterfaceOrientationForPresentation
.
- (NSUInteger) 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 {
// 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;
}
Если вы нацелились на что-то старше, чем на iOS 6, вам нужен метод shouldAutorotateToInterfaceOrientation:
. Изменив, когда он вернет yes, вы определите, будет ли он поворачиваться в указанную ориентацию. Это позволит только нормальную портретную ориентацию.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
// Use this to allow upside down as well
//return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}
Обратите внимание, что shouldAutorotateToInterfaceOrientation:
устарел в iOS 6.0.
Ответ 2
Xcode 5 и выше
- Нажмите на свой проект в Навигаторе проектов на левой боковой панели, чтобы открыть настройки проекта.
- Перейдите на вкладку Общие.
- Снимите флажки, которые вы не хотите в разделе Информация о развертывании, в разделе Ориентация устройства
![screenshot showing where to click]()
Ответ 3
Xcode 4 и ниже
Для тех, кто это пропустил: вы можете использовать экран настроек проекта, чтобы фиксировать ориентации в приложении (нет необходимости переопределять методы в каждом контроллере):
![enter image description here]()
Это так же просто, как переключение поддерживаемых ориентаций интерфейса. Вы можете найти, щелкнув на своем проекте в левой панели > вкладка "Цель приложения" > "Сводка".
Ответ 4
Если вы хотите отключить альбомную ориентацию для iPhone и iPad.
Перейдите на Цели и перейдите на вкладку Общие. См. приведенный ниже экран и отмените выбор ландшафта влево и пейзаж вправо.
![enter image description here]()
Здесь в этом случае будет отключен только ландшафтный режим iPhone, а не для iPad. Для iPad доступны все режимы. Если вы хотите выбрать вариант устройства от универсального до iPad. Это будет выглядеть так. Смотрите ниже экран.
![enter image description here]()
Теперь вам нужно отменить выбор всех режимов , кроме Портрета для iPad. Смотрите скриншот ниже.
![enter image description here]()
Теперь вы успешно отключили все режимы , кроме Портрета для всех устройств.
Ответ 5
Swift 3
Если у вас есть navigationController, подкласс такой, как это (только для портрета):
class CustomNavigationViewController: UINavigationController {
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.portrait
}
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return UIInterfaceOrientation.portrait
}
}
Ответ 6
Удаление метода shouldAutorotateToInterfaceOrientation
из вашего класса целиком также работает. Если вы не планируете вращаться, тогда нет смысла иметь метод в вашем классе, тем меньше код, тем лучше, сохраняет чистоту.
Ответ 7
Xcode 8, Xcode 9, Xcode 10 и выше
![enter image description here]()
Ответ 8
Самое простое решение для iPhone и iPad (универсальное) - его удаление ненужной ориентации в файле info.plist или Project → Info → Свойства пользовательской цели iOS.
Просто добавьте или удалите элемент ориентации из списка:
- Поддерживаемая ориентация интерфейса для iPhone
- Поддерживаемые ориентации интерфейса (iPad) для iPad
![enter image description here]()