Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在没有视图控制器的情况下阻止UIView旋转?_Ios_Swift_Uiview_Uiviewcontroller_Capacitor - Fatal编程技术网

Ios 如何在没有视图控制器的情况下阻止UIView旋转?

Ios 如何在没有视图控制器的情况下阻止UIView旋转?,ios,swift,uiview,uiviewcontroller,capacitor,Ios,Swift,Uiview,Uiviewcontroller,Capacitor,我目前正在开发一个电容器插件,因此我对UIView/Controller堆栈的控制有些有限。我想做的是在网络视图下面显示我的插件视图。电容器插件框架提供了一个BridgeViewController,用于控制WKWebView(电容器webView)BridgeViewController也是rootViewController,因此webView的父视图只是一个没有视图控制器的UIView 我可以通过执行以下操作,使我的插件显示在网络视图下: self.bridge.viewControlle

我目前正在开发一个电容器插件,因此我对UIView/Controller堆栈的控制有些有限。我想做的是在网络视图下面显示我的插件视图。电容器插件框架提供了一个
BridgeViewController
,用于控制
WKWebView
(电容器webView)
BridgeViewController
也是
rootViewController
,因此
webView
的父视图只是一个没有视图控制器的
UIView

我可以通过执行以下操作,使我的插件显示在网络视图下:

self.bridge.viewController.view.superview?.addSubview(self.myPluginViewController.view)
self.bridge.viewController.view.superview?.bringSubviewToFront(self.webView)
其中
bridge.view
返回webView。然而,问题是,
self.myPluginViewController
的生命周期方法不再触发。不幸的是,由于
bridge
rootViewController
bridge.view.superview
没有控制器

我也试过:

self.bridge.viewController.addChild(self.myPluginViewController)
self.bridge.viewController.view.superview?.addSubview(self.myPluginViewController.view)
self.bridge.viewController.view.superview?.bringSubviewToFront(self.webView)
但这会抛出一个
UIViewControllerHierarchyConsistency
错误


你有没有想过我该怎么解决这个问题?是否可以将
myPluginViewController
添加到
bridge
作为webView的同级?或者,是否有方法将
myPluginViewController.view
直接添加到另一个视图,同时保留生命周期方法

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

这样一来,视图控制器要接收生命周期消息,它需要是窗口的实际根视图控制器的子视图。iOS要求所有应用程序都有一个根视图控制器(我想从iOS 7开始)。这意味着您可能在错误的位置寻找根视图控制器,或者您已经拥有它,但没有意识到它


获取根视图控制器的一种简单方法是使用
UIApplication.shared.keyWindow?.rootViewController
。它已被弃用,但至少可以帮助您找到根视图控制器。一旦您确定了哪个视图控制器实际上是根,您就可以设计一种不推荐的访问它的方式。我想你必须让AppDelegate参与进来。

看看这个,我认为这对我没有多大帮助。
self.bridge.viewController
中的视图是一个
WKWebView
,我无法将插件视图添加到该视图中。我需要我的插件视图是该视图的兄弟。不幸的是,
self.bridge.ViewController
是根视图,因此没有任何ViewController的父视图。因此,我唯一可以访问的父视图是
UIView
,而不是
UIViewController
,我相信控制
webView
bridge.viewController
就是
rootViewController
。我放了一个断点,检查了电容器插件框架提供给我的bridge viewController和
UIApplication.shared.keyWindow?.rootViewController
,它们都有相同的内存地址。问题似乎是,我不知道如何将同级viewController添加到rootViewController/bridgeViewController。如果它是根视图控制器,那么它就不能有同级。这就是我所担心的。。为了全面了解我正在抓取的内容,
rootViewController.view.superview
然后会指向窗口(这也是一个UIView)?只要事情没有被篡改,是的,它就是窗口。您可以通过检查它是否属于
UIWindow
类型来验证这一点。