Блокировка ориентации ориентации в режиме просмотра? IOS 7

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

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

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

Я искал вокруг, и ничто не кажется специфичным для iOS 7, и тот, который специфичен для iOS 7, не работает...

Пожалуйста, помогите, спасибо!

На приведенном ниже рисунке описывается, что я должен сделать DON "T" для этой страницы.

enter image description here

Ответ 1

Внедрите в свою реализацию следующее:

- (NSUInteger) supportedInterfaceOrientations {

    return UIInterfaceOrientationMaskPortrait;

}

Это даст вам результаты, которые вы ищете!

Ответ 2

Используйте этот код

@implementation UINavigationController (Rotation_IOS6)

-(BOOL)shouldAutorotate
{

    return UIInterfaceOrientationMaskPortrait;

}

-(NSUInteger)supportedInterfaceOrientations
{

  return UIInterfaceOrientationMaskPortrait;

}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{

 return UIInterfaceOrientationPortrait;

}

@end

Ответ 3

Проблема заключается в том, что, как вы правильно указали, ваша домашняя вкладка не является самым верхним контроллером представления.

Из моих ограниченных знаний по этому вопросу я могу только подумать о следующем:

  • Создайте еще один контроллер представления таблиц и реализуйте методы для управления ориентацией, т.е. shouldAutorotate и supportedInterfaceOrientations;
  • Сделать этот контроллер первым при запуске;
  • Проложите другие вкладки до исходного контроллера табуляции (тот, который поддерживает все ориентации), используя push-сег.

Ответ 4

Думаю, я нашел хорошее решение. Ну, в моем случае я использую UISplitViewController как rootController в раскадровке, но идея такая же.

  • SubClass your rootController (в моем случае UISplitViewController) и выхватите обратный вызов toAutorotate(), чтобы вы могли вызывать subviews shouldAutorotate оттуда.
  • Реализовать shouldAutorotate() в представлении, которое вы хотите заблокировать вращение

    class MyUISplitViewController: UISplitViewController {
    override func shouldAutorotate() -> Bool {
        if ((self.viewControllers.last) != nil && (self.viewControllers.last!.topViewController) != nil){
            if (self.viewControllers.last!.topViewController!.respondsToSelector("shouldAutorotate"))
            {
                return self.viewControllers.last!.topViewController!.shouldAutorotate()
            }
        }
        return true
    }
    }
    

В вашем суб UIViewController

override func shouldAutorotate() -> Bool {
        if (UIDevice.currentDevice().userInterfaceIdiom == .Phone)
        {
            return false
        }else{
            return true
        }
    }

Если вы хотите проверить поддерживаемые ориентации, вы можете просто сделать то же самое с supportedsupportedInterfaceOrientations()

ИЗМЕНИТЬ:

Не забудьте указать свой класс "MyUISplitViewController" в корневом режиме просмотра раскадровки