3 回答
TA贡献1848条经验 获得超6个赞
我遇到了同样的问题,并找到了适用于我的解决方案。为了使它工作,它是不是足以实现- (NSUInteger)supportedInterfaceOrientations你的UINavigationController。您还需要在控制器#3中实现此方法,这是第一个在弹出控制器#4后仅为纵向的控制器。所以,我的UINavigationController中有以下代码:
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
if (self.isLandscapeOK) {
// for iPhone, you could also return UIInterfaceOrientationMaskAllButUpsideDown
return UIInterfaceOrientationMaskAll;
}
return UIInterfaceOrientationMaskPortrait;
}
在视图控制器#3中,添加以下内容:
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
您无需向视图控制器#1,#2和#4添加任何内容。这对我有用,我希望它会对你有所帮助。
TA贡献1859条经验 获得超6个赞
在查看了无数类似问题的每个答案之后,没有一个答案对我有用,但他们确实给了我一些想法。以下是我最终解决问题的方法:
首先,确保项目目标中的“支持的接口方向”包含旋转视图所需的所有方向。
接下来,制作一个类别UINavigationController(因为Apple说不要继承它):
@implementation UINavigationController (iOS6AutorotationFix)
-(BOOL)shouldAutorotate {
return [self.topViewController shouldAutorotate];
}
@end
将您希望能够旋转的类别和视图控制器(我将调用RotatingViewController)导入最高级别的视图控制器,该控制器应包含您的导航控制器。在该视图控制器中,实现shouldAutorotate如下。请注意,这不应与您要旋转的视图控制器相同。
-(BOOL)shouldAutorotate {
BOOL shouldRotate = NO;
if ([navigationController.topViewController isMemberOfClass:[RotatingViewController class]] ) {
shouldRotate = [navigationController.topViewController shouldAutorotate];
}
return shouldRotate;
}
最后,在你的RotatingViewController,实现shouldAutorotate和supportedInterfaceOrientations如下:
-(BOOL)shouldAutorotate {
// Preparations to rotate view go here
return YES;
}
-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAllButUpsideDown; // or however you want to rotate
}
您需要这样做的原因是因为iOS 6控制旋转到根视图控制器而不是顶视图控制器。如果希望单个视图的旋转行为与堆栈中的其他视图的行为不同,则需要在根视图控制器中为其编写特定的大小写。
- 3 回答
- 0 关注
- 511 浏览
添加回答
举报