Я нашел гораздо лучший способ, который работает независимо от контроллера навигации.Прямо сейчас у меня это работает, когда встроено в контроллер Nav, а когда НЕ встроено (хотя сейчас я не использую контроллер Nav, поэтому может быть какая-то ошибка, которую я не видел - например, анимация перехода PUSH может идтисмешно, или что-то в этом роде)
Два NIB с использованием соглашения Apple об именовании.Я подозреваю, что в iOS 6 или 7 Apple может добавить это как «функцию».Я использую его в своих приложениях, и он отлично работает:
срабатывает при повороте WILL, а не при повороте (ждет, пока не запустится анимация поворота), использует соглашение об именовании Apple для файлов ландшафта / портрета (по умолчанию).png - это Default-landscape.png, если вы хотите, чтобы Apple автоматически загружала альбомную версию), перезагружает новый NIB, который сбрасывает self.view - это автоматически обновляет дисплей, а затем вызывает viewDidLoad (Apple НЕ будет вызывать это для вас, если вы вручную перезагрузите NIB)
(NB stackoverflow.com требует это предложение здесь - в модуле форматирования кода есть ошибка)
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if( UIInterfaceOrientationIsLandscape(toInterfaceOrientation) )
{
[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@-landscape", NSStringFromClass([self class])] owner:self options:nil];
[self viewDidLoad];
}
else
{
[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@", NSStringFromClass([self class])] owner:self options:nil];
[self viewDidLoad];
}
}