【发布时间】:2025-11-30 15:50:02
【问题描述】:
我是 iOS 开发的新手,我正在使用 WKWebView 来显示一个使用 Vimeo Player 播放视频的页面。当应用程序启动时,它会正确显示视图,无论它当前处于什么方向。但是,一旦我改变方向,视图要么看起来被放大,要么在视频下方有空白。
令人讨厌的是,它并不一致。有时视图显示正确,有时则不正确。如果我在使用应用程序时尝试放大或缩小视图或尝试滚动,它通常会自行纠正,但即使这样似乎也不是 100% 可靠。
一些截图(在 iPad 2 上测试):
以及用于产生此结果的代码:
import Foundation
import UIKit
import WebKit
class VideoViewController : UIViewController, WKScriptMessageHandler {
@IBOutlet var containerView : UIView! = nil
var webView: WKWebView?
override func loadView() {
super.loadView()
self.webView = WKWebView()
let contentController = WKUserContentController();
let scaleToFit = WKUserScript(source: "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width, initial-scale=1.0'); document.getElementsByTagName('head')[0].appendChild(meta);", injectionTime: WKUserScriptInjectionTime.AtDocumentStart, forMainFrameOnly: true)
contentController.addUserScript(scaleToFit)
contentController.addScriptMessageHandler(self, name: "callbackHandler")
self.view = webView!
}
override func viewDidLoad() {
super.viewDidLoad()
refreshUI()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func refreshUI() {
let url = NSURL(string: "https://photofactsacademy.nl/api/vp.asp?id=152839850")
let requestObj = NSURLRequest(URL: url!)
webView!.loadRequest(requestObj)
}
func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
if(message.name == "callbackHandler") {
print("JavaScript is sending a message \(message.body)")
}
}
}
我查看了 SO 以了解 WKWebView 和方向变化,但没有找到任何对我有帮助的东西。
感谢您的帮助。
【问题讨论】:
-
也许设置设备旋转的框架: override func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation) { //设置 webview 的框架??? }
-
不幸的是,这不起作用。我最终得到了相同的结果。
-
我遇到了同样的问题。您的解决方案确实有效。尽管 JavaScript 调用被调用和执行之间有一点延迟。猜猜我们将不得不忍受它。
-
您找到解决方案了吗?