gpt4 book ai didi

ios - 如何在没有 View Controller 的情况下阻止 UIView 旋转?

转载 作者:行者123 更新时间:2023-11-29 05:17:40 25 4
gpt4 key购买 nike

我目前正在开发 Capacitor 插件,因此我对 UIView/Controller 堆栈的控制有些有限。我想要做的是在 Capacitor webView 下方显示我的插件 View 。 Capacitor Plugin 框架提供了一个 BridgeViewController,它控制 WKWebView (Capacitor webView)。 BridgeViewController 也是 rootViewController,因此 webView 的父级只是一个没有 View Controller 的 UIView

通过执行以下操作,我可以使我的插件显示在 Capacitor webView 下方:

self.bridge.viewController.view.superview?.addSubview(self.myPluginViewController.view)
self.bridge.viewController.view.superview?.bringSubviewToFront(self.webView)

其中bridge.view返回webView。然而问题是 self.myPluginViewController 的生命周期方法不再触发。不幸的是,由于bridgerootViewControllerbridge.view.superview没有 Controller 。

我也试过:

self.bridge.viewController.addChild(self.myPluginViewController)
self.bridge.viewController.view.superview?.addSubview(self.myPluginViewController.view)
self.bridge.viewController.view.superview?.bringSubviewToFront(self.webView)

但这会引发 UIViewControllerHierarchyInconsistency 错误。

关于如何解决这个问题有什么想法吗?是否可以将 myPluginViewController 添加到 bridge 作为 webView 的同级?或者,有没有办法将 myPluginViewController.view 直接添加到另一个 View ,同时保留生命周期方法?

最佳答案

您所描述的情况听起来并不完全准确。屏幕上的每个 View 都有一个父 View 和(树上的某个位置) View Controller 。如果您的 View 是“根”,则意味着您实际上指的是窗口,或者 super View 是一个窗口。

有了这个, View Controller 才能接收生命周期消息,它需要是窗口的实际 Root View Controller 的 subview 。 iOS 要求所有应用程序都有一个 Root View Controller (我认为从 iOS 7 开始)。这意味着您要么在错误的位置寻找 Root View Controller ,要么您已经拥有它但没有意识到它。

获取 Root View Controller 的一个简单方法是使用UIApplication.shared.keyWindow?.rootViewController。它已被弃用,但它至少应该可以帮助您找到 Root View Controller 。一旦确定哪个 View Controller 实际上是根,您就可以构建一种未弃用的访问它的方式。我的猜测是您必须让 AppDelegate 参与进来。

关于ios - 如何在没有 View Controller 的情况下阻止 UIView 旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59012169/

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