在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尺寸或计划。
答案 0 :(得分:0)
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控件等,请告诉我们,谢谢!