Я довольно новичок в разработке iOS, и я использую WKWebView
для отображения страницы, воспроизводящей видео с помощью Vimeo Player. Когда приложение запускается, оно отображает представление правильно, независимо от того, в какой ориентации он находится сейчас. Однако, как только я изменил ориентацию, представление будет либо увеличено, либо будет иметь пробелы ниже видео.WKWebView отображает содержимое неправильно после изменения ориентации
Досадная вещь об этом заключается в том, что она несовместима. Иногда представление отображается правильно, иногда это не так. Если я попытаюсь увеличить или уменьшить вид или попытаться прокручивать при использовании приложения, он обычно исправляет себя, но даже это не кажется на 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) { // установить кадры для веб-просмотра ??? } – valosip
К сожалению, это не сработало. Я получаю те же результаты. – Ionicawa
У меня такая же проблема. Ваше решение действительно работает. Хотя есть небольшая задержка между вызовом JavaScript, вызываемым и исполняемым. Полагаю, нам придется жить с этим. – Isuru