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 并将我自己的添加到子视图?