Как программно установить ориентацию устройства в iOS 7?

Я работаю над приложением для iPad, используя AutoLayout, где, если пользователь включает определенный режим (режим «голова-вверх»), я хочу поддерживать только портретную (или портретную вверх ногами) ориентацию и, более того, если устройство находится в пейзаж, я хотел бы автоматически переключиться в портретный режим.

В контроллере вида сверху у меня есть следующее:

- (NSUInteger) supportedInterfaceOrientations {
    if (self.modeHeadsUp) {
        return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
    } else {
        return UIInterfaceOrientationMaskAll;
    }
}

- (BOOL) shouldAutorotate {
    return TRUE;
}

Основываясь на ответах, которые я видел в другом месте здесь, ответкажется чтобы быть, что я должен использовать "приложение setStatusBarOrientation". Поэтому в методе, в котором пользователь выбрал режим «один на один», я включил:

    UIApplication *application = [UIApplication sharedApplication];
    [application setStatusBarOrientation:UIInterfaceOrientationPortrait
                                animated:YES];

Тем не менее, это просто ничего не делает. Хотя я могу физически переместить устройство, чтобы оно повернулось в портретное положение, оно не делает это автоматически.

На самом деле, когда в ландшафтном режиме после запуска вышеуказанного кода попытка программно установить ориентацию, когда я запрашиваю приложение «statusBarOrientation» со следующим кодом, оно остается на «4» для ландшафтного:

UIApplication *application = [UIApplication sharedApplication];
int orientation = [application statusBarOrientation];
self.movesTextView.text = [NSString stringWithFormat:@"ORIENTATION %d", orientation];

Казалось, что, возможно, autolayout не был запущен с setStatusBarOrientation, поэтому я попытался добавить этот код после, безрезультатно

    [super updateViewConstraints];
    [self.view updateConstraints];

Я понимаю, что Apple хочет оставить ориентацию устройства в руках пользователя. Тем не менее, я хотел бы иметь возможность поддерживать ландшафтный режим, когда не в режиме «один на один».

Я что-то упускаю, чтобы заставить меня изменить ориентацию?

Ответы на вопрос(16)

Ваш ответ на вопрос