我正在开发一个显示本地存储的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
非常感谢
答案 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)
在移动我的代码之前,它对我不起作用。