UiSplitViewController 不会自动旋转
Posted
技术标签:
【中文标题】UiSplitViewController 不会自动旋转【英文标题】:UiSplitViewController doesn't autorotate 【发布时间】:2010-04-29 00:21:35 【问题描述】:我最近遇到了一个问题。我的 iPad 应用程序以某种方式阻止了 iPad 自动旋转。我的应用程序加载了一个 UISplitView,两个视图控制器都为 shouldAutorotateToInterfaceOrientation: 返回 YES。我已经设置了我的 info.plist 以包含所有四个方向的“支持的界面方向”键。但是,当我运行应用程序时,旋转设备不会旋转 splitView(即使我收到 UIDeviceOrientationDidChangeNotification)。此外,当我以不同的方向退出我的应用程序时,它在 iPad 主屏幕中启动时不会自动旋转到正确的视图,直到我再次旋转它而不运行我的应用程序......任何想法将不胜感激...... .
【问题讨论】:
【参考方案1】:UISplitViewController
是我用过的最喜怒无常的视图控制器子类之一。为了让它“完美地”工作,它必须在您的应用程序窗口中作为单个根视图存在。然而,你可以通过一些技巧来解决这个问题——在我的例子中,我需要一个 UITabBarController
至少有两个不同的 UISplitViewController
s 作为视图控制器——但是你必须处理涉及旋转和UISplitViewControllerDelegate
回调未触发。
希望 Apple 在未来让 UISplitViewController
与其他 UIKit
组件更加兼容...
【讨论】:
你可以用你说的诡计绕过它......什么诡计?你取笑! 它归结为只是手动转发适当的轮换方法。记录一堆东西,看看是什么方法,我们没有被调用。然后我只是在我的根视图控制器子类中进行补偿,确保子视图控制器触发了正确的方法,调整了它们的视图大小等。 我现在遇到了同样的问题,我的 SplitViewController 是 TabBarController 下的选项卡,行为不稳定,所以很高兴知道这不仅仅是我!至少感谢您的安慰!【参考方案2】:我在使用两个从属 UINavigationController 时遇到了同样的问题。在我的情况下,一旦我在左侧控制器中覆盖 shouldAutorotateToInterfaceOrientation: 以始终返回“YES”,旋转就会开始工作。
【讨论】:
masterView 和 detailView 都需要支持 YES 用于您尝试旋转到的任何方向。如果其中任何一个不返回 YES,它就不会旋转。我错过了这个微妙的细节,我的 masterView 只支持肖像。希望这对其他人有帮助。【参考方案3】:我发现这可以正常工作 - 只要 UISplitViewController
的两个孩子都实现 shouldAutorotateToInterfaceOrientation
:
即如果你有类似的东西:
MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController_iPad" bundle:nil];
UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil];
UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
self.splitViewController.viewControllers = @[masterNavigationController, detailNavigationController];
self.window.rootViewController = self.splitViewController;
定义rootViewController
的NSApplication
那么MasterViewController
和DetailViewController
都应该实现:
(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
return YES;
以确保轮换有效。
【讨论】:
【参考方案4】:您的 UISplitViewController 是否设置为您的根视图控制器?如果不是,那可能是您的问题的原因。我遇到了类似的问题 - 状态栏会旋转,但我的详细信息和主视图会保持不变。我重新排列了视图,使 UISplitViewController 成为根,然后我的“主菜单”作为模式视图控制器呈现在拆分视图的顶部,它使旋转问题消失了。
根据iPad Programming Guide,“拆分视图控制器的视图应始终安装为应用程序窗口的根视图。”
希望这会有所帮助。
【讨论】:
【参考方案5】:我现在遇到了同样的问题。原因是除了 UISplitViewController 的视图之外,我不小心在窗口中添加了 另一个 视图。删除额外的视图使其工作。
【讨论】:
【参考方案6】:您说您的第一个问题是 UISplitView 阻止您自动旋转。尝试使用 Splitview 的子类,而不是启用自动旋转:
@implementation SplitViewControllerRotating
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
NSLog(@"SplitViewControllerRotating shouldAutorotate");
return YES;
@end
你的第二个问题听起来很奇怪。你说退出你的应用程序后你必须旋转,以便你的 iPad 识别界面方向。帮不了你。
【讨论】:
我试了一下...没用... UISplitView 的目的不就是自动旋转吗? 有人知道ios 9 的解决方案吗?上面回答的答案已被弃用。以上是关于UiSplitViewController 不会自动旋转的主要内容,如果未能解决你的问题,请参考以下文章
UISplitViewController 不会显示模态视图控制器
UISplitViewController - 主弹出框 - 肖像模式:如何自定义/删除最顶层的边框?
具有不是 UITableViewController 的自定义主视图控制器的 UISplitViewController
UISplitViewController 上带有 UIVisualEffectView 的 UIPopoverController - iPhone 6 plus 上的背景不会变得模糊
带有自定义 selectedBackgroundView 的 UITableViewCell,它比 UISplitViewController 上的主视图控制器更宽