Parece que las plantillas de objetos IB en XCode 6 beta todavía están creando objetos de estilo antiguo (UIWebView para iOS y WebView para OSX). Con suerte, Apple los actualizará para el WebKit moderno, pero hasta entonces, ¿cuál es la mejor manera de crear WKWebViews en Interface Builder? ¿Debo crear una vista básica (UIView o NSView) y asignar su tipo a WKWebView? La mayoría de los ejemplos que encuentro en línea lo agregan a una vista de contenedor mediante programación; ¿es mejor por alguna razón?
95
Respuestas:
Tienes razón, no parece funcionar. Si miras en los encabezados, verás:
lo que implica que no puede crear una instancia de una plumilla.
Tendrás que hacerlo a mano en viewDidLoad o loadView.
fuente
Como señalaron algunos, a partir de Xcode 6.4, WKWebView todavía no está disponible en Interface Builder. Sin embargo, es muy fácil agregarlos mediante código.
Solo estoy usando esto en mi ViewController. Omitir el constructor de interfaz
fuente
self.view
interiorloadView()
es lo que conduce a la recursividad infinita. La configuración de la vista, por otro lado, no solo está permitida, sino también requerida (manualmente o mediante el encadenamiento asuper
. De lo contrario, se seguirá llamando mientras la vista lo esténil
).Info.plist
agregue su configuración de seguridad de transporte Info.plist
Xcode 9.1+
Puede encontrar el elemento WKWebView en la biblioteca de objetos.
fuente
WebView
. La respuesta de crx_au es superiorCon Xcode 8 esto ahora es posible, pero el medio para lograrlo es un poco complicado por decir lo menos. Pero bueno, una solución funcional es una solución funcional, ¿verdad? Dejame explicar.
InitWithCoder de WKWebView: ya no está anotado como "NS_UNAVAILABLE". Ahora se ve como se muestra a continuación.
Comience subclasificando WKWebView y anule initWithCoder. En lugar de llamar a super initWithCoder, deberá usar un método de inicio diferente, como initWithFrame: configuration :. Ejemplo rápido a continuación.
En su Storyboard, use un UIView y asígnele una clase personalizada de su nueva subclase. El resto es negocio como de costumbre (establecer restricciones de diseño automático, vincular la vista a una salida en un controlador, etc.).
Finalmente, WKWebView escala el contenido de manera diferente a UIWebView. Es probable que muchas personas quieran seguir el simple consejo de Suppress WKWebView para escalar el contenido para renderizarlo con el mismo aumento que UIWebView para hacer que WKWebView siga más de cerca el comportamiento de UIWebView en este sentido.
fuente
self = [super initWithFrame:myFrame configuration:myConfiguration];
si usa restricciones, no olvide establecerself.translatesAutoresizingMaskIntoConstraints = NO;
Aquí hay una versión simple de Swift 3 basada en la excelente respuesta de crx_au .
Cree una UIView en Interface Builder, asigne sus restricciones y asígnela
WKWebView_IBWrapper
como una clase personalizada, así:fuente
Si aún enfrenta este problema en versiones recientes de Xcode, es decir, v9.2 +, simplemente importe Webkit a su ViewController:
Antes de la solución:
Después de la corrección:
fuente
Esto aparentemente ahora está arreglado en Xcode 9b4. Las notas de la versión dicen "WKWebView está disponible en la biblioteca de objetos de iOS".
No he examinado más a fondo para ver si requiere iOS 11 o si es compatible con versiones anteriores.
fuente
Puede crear una instancia y configurar un WKWebView en IB desde Xcode 9, no es necesario hacerlo en código.
Sin embargo, tenga en cuenta que su objetivo de implementación debe ser superior a iOS 10 o obtendrá un error en tiempo de compilación.
fuente
En XCode versión 9.0.1, WKWebView está disponible en Interface Builder.
fuente
He vinculado WebKit, ¡ahora está funcionando!
fuente
No estoy seguro de si esto ayuda, pero resolví el problema al incluir el marco WebKit para el objetivo. No lo inserte, solo vincule la referencia. Todavía uso el objeto WebView en IB y lo dejo caer en el ViewController en el que lo estoy incrustando y nunca he tenido un problema ...
He trabajado en 4 proyectos WKWebView MacOS ahora y WebView ha funcionado correctamente en cada proyecto.
fuente
Esto funcionó para mí en Xcode 7.2 ...
Primero agregue la vista web como una salida UIWebView en el guión gráfico / IB. Esto le dará una propiedad como esta:
Luego, simplemente edite su código para cambiarlo a WKWebView.
También debe cambiar la clase personalizada a WKWebView en el inspector de identidad.
fuente