Iphone UIViewcontroller的显示方向不正确
我使用Iphone UIViewcontroller的显示方向不正确,iphone,objective-c,uiviewcontroller,uinavigationcontroller,uiinterfaceorientation,Iphone,Objective C,Uiviewcontroller,Uinavigationcontroller,Uiinterfaceorientation,我使用presentViewController从另一个视图控制器演示视图控制器 演示视图控制器(“SourceViewController”)创建新的视图控制器,并在演示之前将其分配给导航控制器(因为“NextViewController”需要导航栏和导航控制器) 但是当我呈现视图控制器时,当原始视图控制器处于横向时,“NextViewController”不会以纵向方式呈现,而是像源视图控制器一样以横向方式呈现 // from the source view controller @impl
presentViewController
从另一个视图控制器演示视图控制器
演示视图控制器(“SourceViewController”)创建新的视图控制器,并在演示之前将其分配给导航控制器(因为“NextViewController”需要导航栏和导航控制器)
但是当我呈现视图控制器时,当原始视图控制器处于横向时,“NextViewController”不会以纵向方式呈现,而是像源视图控制器一样以横向方式呈现
// from the source view controller
@implementation SourceViewController
-(void)showNextViewController
{
NextViewController *viewController = [[NextViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[self presentViewController:viewController animated:YES];
}
@end
@implementation NextViewController
// in NextViewController
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationPortrait;
}
@end
我尝试了许多旋转方法的组合,但未能使其以正确的方向呈现
我认为这是可能的,因为许多苹果组件,如UIImagePickerController,总是以纵向显示,所以我如何强制它的方向
谢谢
编辑:
我创建了一个UINavigationController
子类:
PortraitNavigationController : UINavigationController
@implementation
-(BOOL)shouldAutorotate
{
return NO;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationPortrait;
}
@end
然后在显示NextViewController
PortraitNavigationController *nav = [PortraitNavigationController initWithRootViewController:nextViewController];
[self presentViewController:nav animated:YES];
现在NextViewController
确实是纵向的-但是当我旋转设备来使用这个视图控制器并最终将其关闭时-底层的源代码视图控制器看起来一团糟
底层视图控制器是一个自定义容器视图控制器,它嵌入在UINavigationController
PortraitNavigationController *nav = [PortraitNavigationController initWithRootViewController:nextViewController];
[self presentViewController:nav animated:YES];
它用于显示子视图控制器的容器不在正确的位置
我不希望容器视图控制器在显示并关闭
NextViewController
后立即旋转。旋转设备时,会询问显示的视图控制器支持的旋转和方向-在您的情况下,它是一个UINavigationController,而不是NextViewController的实例。解决此问题的一种方法是将UINavigationController子类化,重写旋转方法,并将调用转发到它的根视图
作为非UIImagePickerController的一个侧面,它是UINavigationController的一个子类。让NexViewController成为UINavigationController的子类,然后在该子类中使用正确的根视图控制器初始化它可能更有意义
另一个选项是,如果不需要使用导航控制器进行任何操作,只需在NextViewController内部alloc和init一个UINavigationBar,并将其添加为子视图。在这种情况下,autolayout很方便,因为您可以将它固定在顶部、左侧和右侧,并让它确定正确的大小和位置 所以NextViewController应该是“NextViewController:UINavigationController”,然后创建一个私有视图控制器?如果将“NextViewController”添加到NavigationController中会发生什么?感谢您的帮助-我尝试了子类解决方案,并添加了编辑编辑如果您知道如何解决该问题,您将需要对执行演示的视图控制器执行同样的操作。当视图控制器被解除时,原始视图控制器处于相同的方向是正常的,因此它不会旋转回您想要的位置。提供布局代码以支持两个方向(autolayout的优势)或添加相关的方向代码。不要忘记实现supportedInterfaceOrientations以返回受支持方向的掩码。