gpt4 book ai didi

uiviewcontroller - 当我插入具有不同支持方向的 Controller 时,为什么 UINavigationController 不改变方向?

转载 作者:行者123 更新时间:2023-12-02 20:49:46 27 4
gpt4 key购买 nike

我的代码是如何设置的:

我使用导航 Controller ,以及控制方向的委托(delegate):

class NavDelegate: UINavigationControllerDelegate {
func navigationControllerSupportedInterfaceOrientations(_ navigationController: UINavigationController) -> UIInterfaceOrientationMask {
print("Checking orientation")
if topViewController != nil {
return topViewController!.supportedInterfaceOrientations
}
return .portrait
}

...
}

我的应用程序的主视图 Controller 名为 MainController,并且仅纵向:

class MainController: UIViewController {
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}

...
}

我有另一个 Controller PhotoController,它支持所有四个方向:

class PhotoController: UIViewController {
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .all
}

...
}

我使用pushViewController()将PhotoController推到MainController的顶部。

问题:

每个 Controller 本身都能正确处理方向 - 当我将手机旋转到所有四个方向时,MainController 保持纵向,而 PhotoController 则旋转到所有四个方向。

但是这种情况无法正常工作:

  1. 将手机横向放置,主 Controller 位于屏幕上。
  2. Controller 为肖像(如预期)。
  3. 将 PhotoController 压入堆栈。

我希望 PhotoController 根据设备方向以横向打开,但它仍保持纵向。如果我手动来回旋转手机, Controller 会随着手机一起旋转。显然,用户永远不必这样做,来回旋转手机以使 Controller 旋转。

当我点击 MainController 中插入 PhotoController 的按钮时,不会调用 navigationControllerSupportedInterfaceOrientations()。

我还尝试过什么:

  • 重写 shouldAutorotate 以在 PhotoController 中返回 true。
  • ...以及 MainController 中。
  • 重写 UINavigationController 中的supportedInterfaceOrientations,而不是使用委托(delegate)。
  • 检查 UINavigationController.visibleViewController 而不是 .topViewController。这不起作用,因为 topviewController 原来是一个 iOS 私有(private)类 UISnapshotModalViewController,而不是我的类,因此在其上调用supportedInterfaceOrientation() 可能不会返回正确的值。

这些都不起作用。

最佳答案

解决方案是调用 UIViewController。 viewWillAppear() 或 viewDidAppear() 中的 attemptsRotationToDeviceOrientation()。

在前一种情况下,插入 Controller 的动画与设备旋转动画同时发生,这看起来很奇怪。在后一种情况下,旋转发生在 Controller 转换动画完成后。这看起来也很奇怪,尽管方式不同。

关于uiviewcontroller - 当我插入具有不同支持方向的 Controller 时,为什么 UINavigationController 不改变方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42644138/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com