Мое приложение поддерживает все ориентации интерфейса, но я хочу, чтобы определенный вид отображался только в книжной ориентации. У меня есть эта реализация подкласса UINavigationController
:
@implementation CustomNavigationController
- (BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
// More methods
@end
Затем для его корневого контроллера представления я реализовал:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
}
- (BOOL)shouldAutorotate
{
return YES;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationPortrait;
}
Это предотвращает поворот контроллера представления в альбомную ориентацию, когда он находится в портретной ориентации, но когда я перехожу к этому представлению, поскольку устройство уже находится в альбомной ориентации, и я ранее был в представлении, которое поворачивается в альбомную ориентацию, я вижу это вид в пейзаже, а также.
Как я могу решить этот сценарий?
viewWillAppear
код наviewDidAppear
...может это исправит? - person Tj3n   schedule 11.12.2015