我知道这是最常见的问题,并且相信我,我已经尝试了各种组合来实现这一点,并在堆栈溢出时经历了大多数帖子。
我有一个名为v1ViewController的UINavigationController,我想要做的是当它向用户显示时我只想让它以纵向或纵向向上显示模式显示,即使用户旋转也没有横向在横向设备,它不应该做任何事情。
注意:我确实突出了Xcode中所有选项以获得支持的界面方向,因为在我的其他视图控制器之一中我需要向用户显示横向和纵向模式,但对于这个UINav Conrtoller我希望它只是保持在纵向模式。
我为iOS 5.0提供的代码工作正常,没有问题。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
if (interfaceOrientation == UIInterfaceOrientationPortrait)
{
return YES;
}
else if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
{
return YES;
}
else
{
return NO;
}
}
我的头痛是iOS 6。无论我尝试做什么,它仍然让用户在风景中旋转血腥的东西(参见代码和截图)
// *********************
// iPhone 5 orientation support
// *********************
- (BOOL)shouldAutorotate
{
UIInterfaceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];
if (interfaceOrientation == UIInterfaceOrientationPortrait)
{
return YES;
}
else if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
{
return YES;
}
else
{
return NO;
}
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationPortrait;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
}
答案 0 :(得分:3)
你需要确保覆盖基础UINavigationController并为其分配一个自定义类(不仅仅是作为UINavController的子视图的viewController,而是包含在navigationBar下面的视图)。在UINavigationController内部,在shouldAutoRotate上返回NO。