场景:我正在为 iOS 开发混合 Cordova (Phonegap) 应用程序。为了混合原生代码和 Cordova 代码,我在 Xcode 7 中设置了一个 Storyboard,其中 UIView 嵌入到容器 View 中(使用嵌入转场),以便能够在整个原生应用程序中重复使用 Web View 。
对于 Cordova View 的嵌入,我找到了这些说明: http://cordova.apache.org/docs/en/edge/guide_platforms_ios_webview.md.html#iOS%20WebViews
这基本上是说你必须调用它:
CDVViewController* viewController = [CDVViewController new];
viewController.view.frame = CGRectMake(0, 0, 320, 480);
[myView addSubview:viewController.view];
但他们没有解释如何将 View 添加到 Storyboard View 。我特别问自己如何处理 CGRectMake 问题,因为我希望 View 能够响应地呈现,即调整自身以适应父 View 的约束(而不是具有固定的矩形)。
我已经通过派生自 Cordova 的标准应用委托(delegate)来实现了这一点,但这一定是错误的方法。当我调用 Cordova 的相机,拍照并返回我的 WebView 时, WebView 突然跳出它的边界(到窗口的顶部),我在 Xcode 控制台中看到这个错误消息:
Presenting view controllers on detached view controllers is discouraged
PS:我实际上使用的是 Swift,但我能够阅读 Objective-C 代码,所以这些语言中的任何一种的代码示例对我来说都很好。
最佳答案
只需为 Storyboard中存在的 View 创建一个导出,连接它并添加 subview
@IBOutlet weak var containerView: UIView!
func addMySubview() {
var viewController = CDVViewController()
viewController.view.frame = containerView.frame
containerView.addSubview(viewController.view)
}
编辑: 在这里,我在 Playground 上做了一个例子,这样你就可以看到你的 View 的框架是如何随着 parent 的变化而变化的。
关于iOS:如何以编程方式将 View 添加到 Storyboard View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32410465/