Измените вашу реализацию shouldAutorotateToInterfaceOrientation:
на следующую, если вы хотите поддерживать все возможные ориентации:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
Если вы хотите поддерживать только: UIInterfaceOrientationLandscapeLeft
, UIInterfaceOrientationLandscapeRight
и UIInterfaceOrientationPortrait
, измените код на:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}
Вам не нужно искать новую ориентацию в [UIApplication sharedApplication].statusBarOrientation
, потому что она уже есть в качестве параметра.
Если вы хотите изменить положение элементов представления при повороте устройства, вы должны использовать их свойство autoresizingMask
. Другим вариантом является реализация метода willRotateToInterfaceOrientation
.
Вы можете изменить autoresizingMask
элементов представления в Интерфейсном Разработчике в Инспекторе размера . Попробуйте экспериментировать с различными комбинациями, пока не получите нужный результат.

Наконец, обратите внимание, что если ваш вид сложен или радикально отличается в каждой ориентации, лучше всего использовать два файла xib: один для портрета и один для ландшафта.