3

在这里阅读了 IOS 6 中处理屏幕旋转的所有方法、Apple 文档和激烈的谷歌搜索后,在使用 xibs 时我仍然坚持这一点。

我想要实现的是只有几个 iPad 的 xib,只有横向,其余的应用程序是纵向的。

如果我使用情节提要,我了解如何对导航控制器进行子类化以覆盖旋转,但我不是,我使用的是 xibs,并且希望任何输入它如何与 xibs 一起使用

在我的应用委托中:

ICHomeController *homeController = [[ICHomeController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:homeController];
navController.navigationBarHidden = YES;
navController.navigationBar.barStyle = UIBarStyleBlackOpaque;
navController.navigationBar.tintColor = [UIColor grayColor];
self.navigationController = navController;
[self.window setRootViewController:self.navigationController];
[self.window makeKeyAndVisible];
return YES;

除了在这里尝试似乎所有解决方案之外,我还在我的 vew 控制器中尝试了明显的方法,但据我所知,在 iOS 6 中它不会被调用。

// Older versions of iOS (deprecated)
 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}


 - (BOOL)shouldAutorotate {
return YES;
 }


 - (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
 }


 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeLeft;
}
4

2 回答 2

3

几天来,我也一直在与更复杂的导航结构作斗争。

基本规则似乎是 ROOT 控制器,无论是 UINavigationController、UITabBarController 还是简单的 UIViewController,都可以控制旋转。因此,当您将 UIViewControllers 推入堆栈时,第一个仍然控制旋转。

如果您使用模态视图,则此模型视图将被视为堆栈的根,直到它被解除。因此,如果您显示模态 UIViewController 然后将视图推送到其顶部,则作为模态视图呈现的 UIViewController 将控制旋转。只需确保模态视图使用 presentViewController:animated:completion。

让某些视图处于不同旋转状态的最简单方法是以模态方式呈现。如果这无法避免,那么直接回到您的第一个视图或 nag 控制器并设置旋转。

在您的轮换方法中添加一些NSLog(@"%s", __FUNCTION__);语句以查看正在调用哪些语句。

在上面的代码中,只有第一种方法是旧的 iOS5(现已弃用)方法。其他 3 个是新的 iOS 6 方法。

使用上面的示例代码,您需要继承 UINavigationController。为此,请创建一个新类作为具有不同名称的 UINavigationController 子类,例如。MyNavigationController 并向其添加旋转方法。然后在上面的代码中而不是使用 UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:homeController];

你会使用:

MyNavigationController *navController = [[MyNavigationController alloc] initWithRootViewController:homeController];

此外,请确保您在此处选择了允许的方向: 在此处输入图像描述

于 2012-12-23T17:33:59.937 回答
0

我有同样的问题。这就是在 5 和 6 中对我有用的方法。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {

    return (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

- (BOOL)shouldAutorotate NS_AVAILABLE_IOS(6_0)
{
    return NO;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation NS_AVAILABLE_IOS(6_0) {
    return UIInterfaceOrientationLandscapeLeft;
}

在目标总结方面,只有纵向模式是“支持”的。

于 2013-06-16T10:46:33.083 回答