WKWebView不会出现在自定义UIView中

问题描述 投票:2回答:3

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

在相应的类中我加载了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视图,但它立即消失,我的代码出了什么问题?

ios swift wkwebview
3个回答
0
投票

请注意,webView.backgroundColor无法正常工作。尝试使用load url函数或调用loadHTMLString进行验证。

只是为了确保它不是布局问题,使用“Debug View Hierarchy”(在Debug运行应用程序时单击Xco​​de中的双矩形图标)来检查子视图的边界/框架。如果您在那里看到问题,那么您需要添加适当的布局约束。

如果是这样,您也可以使用以下实用程序功能进行上述所有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)
        ]
    )
}

0
投票

删除此行:

webView.translatesAutoresizingMaskIntoConstraints = false

那条线意味着,使用我的约束。您没有约束,因此当布局发生时,Web视图最终没有大小或位置。


0
投票

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

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

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

所以,在信中

  • 之前的情况:xib的contentView - > webView
  • 现在的情况:xib的contentView - > UIView - > webView
© www.soinside.com 2019 - 2024. All rights reserved.