WKWebView 添加到子视图,并将大小设置为等于父视图?

Posted

技术标签:

【中文标题】WKWebView 添加到子视图,并将大小设置为等于父视图?【英文标题】:WKWebView add to subview, and set size equal to parent? 【发布时间】:2016-09-22 18:16:20 【问题描述】:

我正在开发一个显示本地存储的 html 内容的应用程序。

我的故事板场景由一个自定义菜单视图 ('MyMenuBar') 和一个'containerView' 组成,我希望在其中加载 HTML。这两个项目都在情节提要中得到了适当的限制。

我正在尝试使用 Apple 推荐的 WKWebView。我想将 WKWebView 添加为“containerView”的子视图,并为其提供相同的约束,但是我无法做到这一点。内容从屏幕边缘掉出,或根本不显示。

这是我所拥有的:

@IBOutlet weak var MyMenuBar: UIView!
@IBOutlet weak var containerView: UIView!

...
var myWebView: WKWebView?

//View did load...
webViewWK = WKWebView()

containerView.addSubview(myWebView!)
myWebView?.frame = containerView.frame

myWebView?.load(localFileURL!)

我不确定这里出了什么问题。我试过了:

view.insertSubview(myWebView!, belowSubview: MyMenuBar)

containerView = myWebView!

但这些没有任何显示。我也试过:

myWebView?.translatesAutoresizingMaskIntoConstraints = false

但是,我仍然遇到同样的异常布局问题,内容缩放不正确,从屏幕上掉下来。

我可以通过简单地在情节提要上使用 UIWebView 来解决这个问题,但是我想要 WKWebView 的性能和面向未来的能力,并且不明白为什么我不能以编程方式添加它并使用正确的约束。

我正在使用 Xcode 8.0 和 Swift 3

非常感谢

【问题讨论】:

【参考方案1】:

对我有用的是除了指定子布局的坐标外,还指定自动调整大小的掩码,从Sparky 的回答中得到暗示

myWebView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
myWebView.frame = CGRect(origin: CGPoint.zero, size: containerView.frame.size)

【讨论】:

似乎对我不起作用。无论我如何配置容器视图,webview 仍然是全屏的。介意分享你的代码吗?【参考方案2】:

我认为问题出在以下行:

MyWebView?.frame = containerView.frame

请记住,当您将子视图添加到容器视图时,必须在相对于父视图的坐标中指定子视图的框架。例如,如果您的容器视图的原点坐标为 (100, 100),这意味着 Web 视图的原点将位于与容器视图 (100, 100) 的偏移处,而不是容器的原点查看。

指定框架的正确方法是:

myWebView?.frame = CGRect(origin: CGPoint.zero, size: containerView.frame.size)

我认为这应该可以解决您的问题。希望对您有所帮助!

【讨论】:

感谢您的回复,但很遗憾这并没有解决问题。超级视图约束的尾随空间每次都被打破,在控制台中没有解释。【参考方案3】:

尝试将您的代码放入 viewDidAppear 而不是 viewDidLoad。 Sparky 的回答对我有用:

videoWebKitView = WKWebView(frame: CGRect(origin: CGPoint.zero, size: videoContainer.frame.size))

videoContainer.addSubview(videoWebKitView)

在我移动我的代码之前它对我不起作用。

【讨论】:

以上是关于WKWebView 添加到子视图,并将大小设置为等于父视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 UITableViewCell NSIBPrototypingLayoutConstraint 并将我自己的添加到子视图?

WKWebView 添加为子视图

如何控制子视图的大小和布局?

WKWebView+contentInset 使内容大小错误

如何在不将其添加到子视图的情况下截取 uiview?

当 WKWebView 框架调整大小时,内容大小损坏