【问题标题】:iOS8 - prevent rotation on presenting viewControlleriOS8 - 防止在呈现 viewController 时旋转
【发布时间】:2015-04-11 15:11:50
【问题描述】:

我们有一个带有 tableView 的 MainViewController,它提供了一个新的 modalViewController。

MainViewController 仅限纵向,modalViewController 可以旋转。

问题是在iOS8中,modalViewController旋转时,在MainViewcontroller中调用了iOS8中旋转的回调方法-- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

因此,UITableView 正在重新加载其数据,这是我们不希望的行为。

我们可以阻止 iOS 8 的这个功能,而不是旋转呈现的 UIViewController 吗?

【问题讨论】:

  • iOS7 上是否调用了回调?因为根据documentation,它是在iOS8上引入的
  • @Leonardo in iOS7 一切都很好,这确实是iOS8的一个我不想要的功能......
  • 覆盖它并让它什么都不做
  • 你找到解决办法了吗?
  • @Mathieu 请在下面查看我的答案,我在 git 中做了示例项目。

标签: ios uitableview ios8 rotation modalviewcontroller


【解决方案1】:

所以经过漫长的搜索和调查,我终于想出了一个可能的解决方案。

首先,我可以使用导航控制器并推送 viewController 而不是呈现它,但它破坏了我的代码并且不是那么正确。

我能做的第二件事是不设置约束。我仍然可以使用自动布局,但如果我不设置约束,并设置默认约束,tableView 不会重新加载。当然这也不是很聪明的事情,因为我的 viewController 中有很多元素。

最后,我发现我可以在另一个 UIWindow 中显示这个“模态”视图控制器。我创建 UIWindow 并将 modalViewController 设置为其 rootViewController。

我在 git 中放了一些示例项目: https://github.com/OrenRosen/ModalInWindow

希望对您有所帮助。

【讨论】:

  • 这是我长期以来一直在尝试和搜索的。非常感谢@oren
  • @oren 我在 iOS 9 上也有这个问题。解决方法是检查presentedViewController
【解决方案2】:

我用导航控制器做了一些similar 的操作,除非顶部推动的控制器确实旋转,否则它不会旋转。

在您的情况下,检查主控制器是否正在呈现另一个控制器。如果不是,则拒绝旋转,否则返回所呈现的控制器为旋转方法返回的任何内容。

至于您的表格视图,它不应该因为旋转而重新加载

【讨论】:

  • 我需要以模态方式呈现 viewController,而不是推送 viewController,我已经知道推送 viewController 时它不会旋转,请在发布问题之前阅读 cmets 和其他答案。在 iOS8 中以模态方式呈现时,当呈现的 viewController 旋转时,所有屏幕都会旋转,它也会影响 presentingViewController。还是谢谢
  • 我读了这个问题,知道你想展示,而不是推动。我刚刚给你举了一个例子,推送控制器也可以与呈现的控制器一起使用。
  • 谢谢,非常感谢。但是我尝试了所有可能的解决方案并没有为我工作。看起来呈现的 viewController 没有旋转,但确实如此,它的视图大小确实发生了变化。无论如何,我用一个额外的 UIWindow 解决了它。同时它就像一个魅力,但我仍然在等待一些意想不到的行为...... :)
【解决方案3】:

在 iOS 8 中,当您更改设备方向时旋转的视图是添加到 UIWindow 的第一个视图。因此,如果您在 presentedController 中保存对它的引用,则可以覆盖 shouldAutorotatesupportedInterfaceOrientations 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2014-12-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-04-15
    相关资源
    最近更新 更多