Я не уверен, что это была ваша проблема, но у меня есть приложение, которое запускается с одним контроллером представления в портретном режиме, а затем я пытаюсь представить второй контроллер представления в альбомном режиме. Я также использую метод setRootViewController, чтобы мне не пришлось освобождать / перераспределять второй контроллер представления и терять информацию о моем состоянии, поскольку пользователи будут часто переключаться между двумя представлениями.
У меня была та же проблема, когда второй контроллер вида всегда отображался в портретном режиме, а не в альбомной, хотя сам контроллер вида указывает, что он никогда не разрешает портретный режим.
Исправление для меня состояло в том, чтобы убедиться, что в делегате приложения я представил первый контроллер представления, используя
[window setRootViewController:controller];
вместо
[window addSubview:controller.view];
Это было старое приложение, и в оригинальном шаблоне по умолчанию использовался addSubview. Похоже, что если не был указан исходный контроллер корневого представления, необходимые сообщения об ориентации никогда не поступят в последующие контроллеры представления, которые установлены как корневые. Надеюсь, это поможет!