Ta odpowiedź odnosi się do pytań zadanych w komentarzach do postu PO:
Aby wymusić pojawienie się widoku w określonej orientacji, w viewWillAppear umieść następujące elementy:
UIApplication* application = [UIApplication sharedApplication];
if (application.statusBarOrientation != UIInterfaceOrientationPortrait)
{
UIViewController *c = [[UIViewController alloc]init];
[self presentModalViewController:c animated:NO];
[self dismissModalViewControllerAnimated:NO];
}
Trochę to hack, ale to zmusza UIViewController
do przedstawienia portretu, nawet jeśli poprzedni kontroler był krajobrazem
UPDATE dla iOS7
Powyższe metody są teraz przestarzałe, więc w przypadku iOS 7 użyj następujących:
UIApplication* application = [UIApplication sharedApplication];
if (application.statusBarOrientation != UIInterfaceOrientationPortrait)
{
UIViewController *c = [[UIViewController alloc]init];
[c.view setBackgroundColor:[UIColor redColor]];
[self.navigationController presentViewController:c animated:NO completion:^{
[self.navigationController dismissViewControllerAnimated:YES completion:^{
}];
}];
}
Co ciekawe, w chwili pisania tego tekstu albo teraźniejszość, albo zwolnienie muszą być animowane. Jeśli żadna z nich nie jest, otrzymasz biały ekran. Nie mam pojęcia, dlaczego to działa, ale działa! Efekt wizualny różni się w zależności od tego, który jest animowany.