Я публикую это, потому что, после борьбы с этой проблемой в течение большей части дня (и многих, многих поисков в Google и StackOverflow), я наконец нашел проблему, но я нигде не видел этого решения.
У меня есть приложение с UINavigationController в качестве корневого контроллера и двумя UIViewController, которые принадлежат корневому контроллеру.Все они созданы программно, я вообще не использую Interface Builder.Оба UIViewController настроены для обработки вращения во всех ориентациях (предположительно), но только корневой UIViewController вращается правильно.Для второго UIViewController shouldAutoRotateToInterfaceOrientation
запускается один раз, но никогда не запускается снова, а willRotateToInterfaceOrientation никогда не запускается вообще.
Контроллер проблемного вида имеет только стандартные элементы управления для подпредставлений: UILabel, UITextView и UISwitch.Он не включает tabBar или любой другой контроллер представления в качестве subView.View и VC оба находятся в области видимости и выглядят здоровыми.Все взаимодействие с представлением работает правильно, кроме вращения.
Я специально звоню:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications
и реализую:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
вместе с методом didRotate
ничего не изменило.