ios - type - WKWebView equivalente para las escalas de UIWebViewPageToFit
wkwebview before ios 11.0(nscoding support was broken in previous versions) (6)
Estoy actualizando mi aplicación iOS para reemplazar
UIWebView
con
WKWebView
.
Sin embargo, no entiendo cómo lograr el mismo comportamiento con
WKWebView
.
Con
UIWebView
usé
scalesPageToFit
para asegurar que la página web se mostrara con el mismo tamaño que el tamaño de la pantalla (para que aparezca la pantalla completa sin desplazarse).
Encontré esa solución en la web, sin embargo, no funciona:
- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation {
NSString *javascript = @"var meta = document.createElement(''meta'');meta.setAttribute(''name'', ''viewport'');meta.setAttribute(''content'', ''width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no'');document.getElementsByTagName(''head'')[0].appendChild(meta);";
[webView evaluateJavaScript:javascript completionHandler:nil];
}
Agregar metaetiquetas o cambiar el código de script Java no funcionó para mí. Luego cambié el marco para que funcionara bien, mi vista web estaba alineada y se ajustaba a la pantalla después de escribir el siguiente código (Swift):
var screenWidth: CGFloat {
return UIScreen.main.bounds.size.width
}
var screenHeight: CGFloat {
return UIScreen.main.bounds.size.height
}
yourWebView = WKWebView(frame: CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight), configuration: WKWebViewConfiguration())
yourWebView.navigationDelegate = self
yourContainerView.addSubview(yourWebView)
Eco de la respuesta de nferocious76, en código swift: versión Swift2.x
let jscript = "var meta = document.createElement(''meta''); meta.setAttribute(''name'', ''viewport''); meta.setAttribute(''content'', ''width=device-width''); document.getElementsByTagName(''head'')[0].appendChild(meta);"
let userScript = WKUserScript(source: jscript, injectionTime: WKUserScriptInjectionTime.AtDocumentEnd, forMainFrameOnly: true)
let wkUController = WKUserContentController()
wkUController.addUserScript(userScript)
let wkWebConfig = WKWebViewConfiguration()
wkWebConfig.userContentController = wkUController
let youWebView = WKWebView(frame: CGRectZero, configuration: wkWebConfig)
versión swift3
let jscript = "var meta = document.createElement(''meta''); meta.setAttribute(''name'', ''viewport''); meta.setAttribute(''content'', ''width=device-width''); document.getElementsByTagName(''head'')[0].appendChild(meta);"
let userScript = WKUserScript(source: jscript, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
let wkUController = WKUserContentController()
wkUController.addUserScript(userScript)
let wkWebConfig = WKWebViewConfiguration()
wkWebConfig.userContentController = wkUController
let yourWebView = WKWebView(frame: self.view.bounds, configuration: wkWebConfig)
Me di cuenta debajo de soultion. Para hacer que el contenido se ajuste al tamaño del dispositivo.
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) { for making the content to fit with the device size
let jscript = "var meta = document.createElement(''meta''); meta.setAttribute(''name'', ''viewport''); meta.setAttribute(''content'', ''width=device-width''); document.getElementsByTagName(''head'')[0].appendChild(meta);"
webView.evaluateJavaScript(jscript)
}
Similar a @ nferocious76''s pero en lenguaje Swift
var scriptContent = "var meta = document.createElement(''meta'');"
scriptContent += "meta.name=''viewport'';"
scriptContent += "meta.content=''width=device-width'';"
scriptContent += "document.getElementsByTagName(''head'')[0].appendChild(meta);"
webView.evaluateJavaScript(scriptContent, completionHandler: nil)
También puede probar el WKUserScript.
Aquí está mi configuración de trabajo:
NSString *jScript = @"var meta = document.createElement(''meta''); meta.setAttribute(''name'', ''viewport''); meta.setAttribute(''content'', ''width=device-width''); document.getElementsByTagName(''head'')[0].appendChild(meta);";
WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
WKUserContentController *wkUController = [[WKUserContentController alloc] init];
[wkUController addUserScript:wkUScript];
WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
wkWebConfig.userContentController = wkUController;
wkWebV = [[WKWebView alloc] initWithFrame:self.view.frame configuration:wkWebConfig];
puede agregar configuración adicional a su WKWebViewConfiguration.
Versión C #, para usar en el Renderizador personalizado de Xamarin:
string jScript = @"var meta = document.createElement(''meta''); meta.setAttribute(''name'', ''viewport''); meta.setAttribute(''content'', ''width=device-width''); document.getElementsByTagName(''head'')[0].appendChild(meta);";
WKUserScript wkUScript = new WKUserScript((NSString)jScript, WKUserScriptInjectionTime.AtDocumentEnd, true);
WKUserContentController wkUController = new WKUserContentController();
wkUController.AddUserScript(wkUScript);
WKWebViewConfiguration wkWebConfig = new WKWebViewConfiguration();
wkWebConfig.UserContentController = wkUController;
WKWebView webView=new WKWebView(Frame, wkWebConfig);