WKWebView 没有出现在自定义 UIView 中

WKWebView does not appear in a custom UIView

我有一个带有 xib 的自定义 UIView。除内容视图外,xib 为空。

在相应的class中我加载了xib,然后我尝试创建一个像这样的WKWebView:

@IBOutlet var contentView: UIView!

...

Bundle.main.loadNibNamed("CustomView", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds

let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: self.frame, configuration: webConfiguration)
webView.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(webView)

webView.backgroundColor = UIColor.orange    // Just to check visually 

在我的 UIViewController 中:

let v = CustomView.init(frame: frame)
self.view.addSubview(v)

当我 运行 我的项目时,当视图控制器出现时,我可以看到带有橙色背景的 Web 视图,但它立即消失,我的代码有什么问题吗?

请注意,webView.backgroundColor 未按预期工作。尝试使用 load url 函数或调用 loadHTMLString 来验证。

为了确保这不是布局问题,请使用 "Debug View Hierarchy"(调试 运行 应用程序时单击 Xcode 中的双矩形图标)检查 bounds/frame你的子视图。如果您在那里看到问题,那么您需要添加适当的布局约束。

如果是这样,您还可以对上述所有 addSubview 调用使用以下实用函数。它通过将子视图边缘拉伸到其中的边缘(全宽和高度)在另一个视图中添加一个子视图。

public static func add(_ subView: UIView, in containerView: UIView) {
    containerView.addSubview(subView)
    subView.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
        subView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
        subView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
        subView.topAnchor.constraint(equalTo: containerView.topAnchor),
        subView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
        ]
    )
}

删除这一行:

webView.translatesAutoresizingMaskIntoConstraints = false

该行的意思是,使用我的约束。你没有任何限制,所以当布局发生时,网络视图最终没有大小或位置。

我找到了解决问题的方法。

最初我使用contentView.addSubview(webView)contentView在我的xib的第一层,当我创建一个新的xib时自动创建。

为了解决我的问题,我直接在 Interface Builder 中创建了一个 UIView 作为 contentView 的子视图。 然后,在 y 代码中,我将 web 视图添加为这个新视图的子视图,而不是来自 contentView。现在好了。

所以,简而言之

  • 之前的情况:xib的contentView --> webView
  • 现在的情况:xib的contentView --> UIView --> webView