it-roy-ru.com

Как я могу отключить альбомную ориентацию?

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

29
user1483652

Чтобы отключить ориентации для определенного View Controller, теперь вы должны переопределить 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: . Изменив значение «Да», вы определите, будет ли он вращаться в указанной ориентации. Это позволит только нормальную книжную ориентацию.

- (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

51
thegrinner

Xcode 5 и выше

  • Нажмите на свой проект в Навигаторе проектов на левой боковой панели, чтобы открыть настройки проекта.
  • Перейдите на вкладку General.
  • Снимите флажки с ненужных параметров в разделе Информация о развертывании в разделе Ориентация устройства

screenshot showing where to click

37
skywinder

Xcode 4 и ниже

Для тех, кто пропустил это: вы можете использовать экран настроек проекта, чтобы зафиксировать ориентации по всему приложению (нет необходимости переопределять методы в каждом контроллере):

enter image description here

Это так же просто, как переключение поддерживаемых ориентаций интерфейса. Вы можете найти, нажав на свой проект в левой панели> цель приложения> вкладка Сводка.

28
Thomas Verbeek

Если вы хотите отключить альбомную ориентацию для iPhone и iPad

Перейдите к Targets и перейдите на вкладку General. См. Экран ниже и отмените выбор пейзажа влево и пейзажа вправо.

 enter image description here

Здесь в этом случае только альбомный режим iPhone будет отключен не для iPad. Для iPad доступны все режимы. Если вы хотите выбрать вариант устройства от универсального до iPad. Это будет выглядеть так. Смотрите ниже экрана.

 enter image description here

Теперь вам нужно отменить выбор всех режимов , кроме Portrait для iPad. Смотрите скриншот ниже.

 enter image description here

Теперь вы успешно отключили все режимы , кроме Portrait для всех устройств.

1
iOS

Swift 3 Если у вас есть навигационный контроллер, создайте его подкласс следующим образом (только для портрета):

class CustomNavigationViewController: UINavigationController {

  override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return UIInterfaceOrientationMask.portrait
  }

  override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
    return UIInterfaceOrientation.portrait
  }
}
1
kurtanamo

Полное удаление метода shouldAutorotateToInterfaceOrientation из вашего класса также работает. Если вы не планируете ротацию, то нет смысла использовать метод в вашем классе: чем меньше кода, тем лучше, и все будет в порядке.

0
ElasticThoughts