wkwebview在窗口更改通知后调整大小

时间:2017-02-04 01:11:38

标签: swift2 wkwebview

在swift中,我加载了音频/视频网址,但视图没有调整大小,IF,网址是本地文件;网址很好。

我希望缩放/增大/等视图以跟踪窗口与保持原始维度。我先去IB看一个视图约束但没有快乐;该选项未启用。

所以我在思考这个问题 - 一个通知处理程序 - ala objective-c,在窗口改变时调整大小:

//  Listen for window resizes
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(WebViewController.windowResized(_:)), name: NSWindowDidEndLiveResizeNotification, object: nil)

var orig = CGSize(width: 0,height: 0)
func windowResized(urlObject : NSNotification) {
    let url = (self.webView.URL)
    if ((url?.isFileReferenceURL()) != nil) {
        let track0 = AVURLAsset(URL:url!, options:nil).tracks[0]
        if track0.mediaType == AVMediaTypeVideo
        {
            orig = track0.naturalSize
            print("original size ",orig)
            let bounds = webView.window?.contentView!.bounds
            webView.window?.setContentSize(orig)
            webView.bounds.size = orig
        }
    }
}

由于新边界设置不起作用,因此无法正常工作。好奇,通知NSWindowDidResizeNotification是不可用的?

所以也许我正在犯这个错误。

所以我问是否有更好的方法来处理尺寸更改事件以影响webView尺寸或计划。

2 个答案:

答案 0 :(得分:0)

WKWebView实际上是在您应用的单独窗口中运行的。因此,获取窗口通知将无效。

这篇文章有望引导您找到正确的通知

How to detect a movie being played in a WKWebView?

答案 1 :(得分:0)

所以我修改了我的原文以添加' webView.bounds.size = orig'然后使用viewLayout()添加了修复程序。

override func viewDidLayout() {
    super.viewDidLayout()

    let newSize = webView.bounds.size
    let aspect = orig.height / orig.width
    let magnify = newSize.width / orig.width
    let newHeight = newSize.width * aspect
    let adjSize = NSMakeSize(newSize.width-1,newHeight-1)

    webView.setMagnification(magnify, centeredAtPoint: NSMakePoint(adjSize.width/2.0, adjSize.height/2.0))
    view.bounds.size = adjSize
}

然而,这也放大了控件,并且在同一webview中使用其他视频会导致布局偏斜;我越来越近了,但这个问题已经解决了。

舍入黑客(h / w - 1)有效,而使用round()和rint()则没有;我试图避免滚动条。如果有办法避免放大webkit控件等,请告诉我们,谢谢!