Я наконец нашел причину своей проблемы.
Мое приложение должно поддерживать всю ориентацию на iPad и портретный режим только на iPhone. Поэтому я добавил следующий код UIApplicationDelegate:
- (UIInterfaceOrientationMask) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
if (window.traitCollection.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
return UIInterfaceOrientationMaskAll;
}
return UIInterfaceOrientationMaskPortrait;
}
Но иногда это дает мне нулевое окно, как в случае UIImagePickerController, представленного с использованием UIPopoverPresentationController на iPad, и возвращает UIInterfaceOrientationMaskPortrait и вызывает то, что строка состояния поворачивается в портретный режим. Я также заметил, что это происходит только при проверке UIRequiresFullScreen.
Я решил свою проблему, проверив, что окно не равно нулю, как показано ниже:
- (UIInterfaceOrientationMask) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
if (window) {
if (window.traitCollection.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
return UIInterfaceOrientationMaskAll;
} else {
return UIInterfaceOrientationMaskPortrait;
}
} else {
return UIInterfaceOrientationMaskAll;
}
}