我有一个横向 UIViewController,它以纵向模式显示 UINavigationController。当我使用模态 segue 连接从视图控制器到导航控制器时,由于某种原因,视图控制器最初被强制为纵向(最初它应该是横向)。当我删除 segue 时,事情会按预期工作。
期望的行为是使用从横向的界面到纵向的另一个界面的模态segue。
知道这里发生了什么吗?或者如何使其按预期工作?
我有一个横向 UIViewController,它以纵向模式显示 UINavigationController。当我使用模态 segue 连接从视图控制器到导航控制器时,由于某种原因,视图控制器最初被强制为纵向(最初它应该是横向)。当我删除 segue 时,事情会按预期工作。
期望的行为是使用从横向的界面到纵向的另一个界面的模态segue。
知道这里发生了什么吗?或者如何使其按预期工作?
您的意思是最初导航控制器被强制为纵向?
我已经使用 UIViewController 子类完成了此操作,其中我有一个纵向视图控制器,它对横向视图控制器执行模态 segue。关键是告诉第二个控制器不要自动旋转到我不想要的任何方向:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
我认为,您需要继承 UINavigationController 以便能够设置它。
segue 在情节提要中被定义为 Modal,第一个(演示者)视图控制器中的代码看起来很正常:
-(IBAction) zoomIn:(id)sender {
[self performSegueWithIdentifier:@"ZoomIn" sender: self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"ZoomIn"]) {
OSZoomViewController *zoom = [segue destinationViewController];
zoom.image = ...;
zoom.presenter = self;
}
}
使用通知。
-(void)viewWillAppear:(BOOL) animated{
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(receivedRotate:) name: UIDeviceOrientationDidChangeNotification object: nil];
}
-(void) receivedRotate: (NSNotification*) notification
{
UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];
if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
{
[self performSegueWithIdentifier:@"/* Segue from the VCPotrait to VCLandscape*/" sender: self];
}
}
转场应该是模态的。