Я работаю над приложением для iPad, используя AutoLayout, где, если пользователь включает определенный режим (режим "голова-вверх"), я хочу поддерживать только портретную (или портретную вверх ногами) ориентацию и, более того, если устройство находится в пейзаж, я хотел бы автоматически переключиться в портретный режим.
В контроллере вида сверху у меня есть следующее:
- (NSUInteger) supportedInterfaceOrientations {
if (self.modeHeadsUp) {
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
} else {
return UIInterfaceOrientationMaskAll;
}
}
- (BOOL) shouldAutorotate {
return TRUE;
}
Основываясь на ответах, которые я видел в другом месте здесь, кажется, что я должен использовать "application 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 хочет оставить ориентацию устройства в руках пользователя. Тем не менее, я хотел бы иметь возможность поддерживать ландшафтный режим, когда не в режиме "один на один".
Я что-то упускаю, чтобы заставить меня изменить ориентацию?