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

时间:2016-09-22 18:16:20

标签: ios swift swift3 wkwebview

我正在开发一个显示本地存储的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

非常感谢

3 个答案:

答案 0 :(得分:8)

对我来说有用的是指定自动调整遮罩以及子布局的坐标,从Sparky的回答中提示

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

答案 1 :(得分:1)

我认为问题在于:

MyWebView?.frame = containerView.frame

请记住,在将子视图添加到容器视图时,必须在相对于父视图的坐标中指定子视图的框架。例如,如果容器视图的原点(100,100)的坐标为,则表示Web视图的原点位于容器视图(100,100)的偏移处,而不是容器的原点图。

指定框架的正确方法是:

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

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

答案 2 :(得分:0)

尝试将代码放入viewDidAppear而不是viewDidLoad。它适用于Sparky的回答:

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

videoContainer.addSubview(videoWebKitView)

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