Il semble que les modèles d'objets IB dans XCode 6 beta créent toujours des objets à l'ancienne (UIWebView pour iOS et WebView pour OSX). Espérons qu'Apple les mettra à jour pour le WebKit moderne, mais d'ici là, quelle est la meilleure façon de créer des WKWebViews dans Interface Builder? Dois-je créer une vue de base (UIView ou NSView) et attribuer son type à WKWebView? La plupart des exemples que je trouve en ligne l'ajoutent à une vue de conteneur par programmation; est-ce mieux pour une raison quelconque?
95
Réponses:
Vous avez raison - cela ne semble pas fonctionner. Si vous regardez dans les en-têtes, vous verrez:
ce qui implique que vous ne pouvez pas en instancier un à partir d'une pointe.
Vous devrez le faire à la main dans viewDidLoad ou loadView.
la source
Comme certains l'ont souligné, à partir de Xcode 6.4, WKWebView n'est toujours pas disponible sur Interface Builder. Cependant, il est très facile de les ajouter via le code.
J'utilise juste ceci dans mon ViewController. Sauter le générateur d'interface
la source
self.view
intérieurloadView()
est ce qui conduit à une récursivité infinie. La définition de la vue, en revanche, est non seulement autorisée mais en fait obligatoire (manuellement ou par chaînagesuper
. Sinon, elle continuera à être appelée tant que la vue le seranil
).Info.plist
ajoutez votre paramètre de sécurité de transport Info.plist
Xcode 9.1+
Vous pouvez trouver l'élément WKWebView dans la bibliothèque d'objets.
la source
WebView
. La réponse de crx_au est supérieureAvec Xcode 8, c'est désormais possible, mais les moyens d'y parvenir sont pour le moins un peu piratés. Mais bon, une solution de travail est une solution de travail, non? Laisse-moi expliquer.
InitWithCoder de WKWebView: n'est plus annoté comme "NS_UNAVAILABLE". Il ressemble maintenant à l'illustration ci-dessous.
Commencez par sous-classer WKWebView et remplacez initWithCoder. Au lieu d'appeler super initWithCoder, vous devrez utiliser une méthode init différente, telle que initWithFrame: configuration :. Exemple rapide ci-dessous.
Dans votre Storyboard, utilisez un UIView et donnez-lui une classe personnalisée de votre nouvelle sous-classe. Le reste est normal (définition de contraintes de mise en page automatique, liaison de la vue à une prise dans un contrôleur, etc.).
Enfin, WKWebView met à l'échelle le contenu différemment de UIWebView. De nombreuses personnes voudront probablement suivre le conseil simple de Supprimer WKWebView de la mise à l'échelle du contenu pour le rendre au même grossissement que UIWebView pour que WKWebView suive de plus près le comportement d'UIWebView à cet égard.
la source
self = [super initWithFrame:myFrame configuration:myConfiguration];
aussi si vous utilisez des contraintes, n'oubliez pas de définirself.translatesAutoresizingMaskIntoConstraints = NO;
Voici une version simple de Swift 3 basée sur l'excellente réponse de crx_au .
Créez un UIView dans Interface Builder, attribuez vos contraintes et affectez-le en
WKWebView_IBWrapper
tant que classe personnalisée, comme ceci:la source
Si vous rencontrez toujours ce problème dans les versions récentes de Xcode, c'est-à-dire v9.2 +, importez simplement Webkit dans votre ViewController:
Avant le correctif:
Après le correctif:
la source
Ceci est maintenant apparemment corrigé dans Xcode 9b4. Les notes de publication indiquent que «WKWebView est disponible dans la bibliothèque d'objets iOS».
Je n'ai pas cherché plus en profondeur pour voir s'il nécessite iOS 11 ou s'il est encore rétrocompatible.
la source
Vous pouvez instancier et configurer un WKWebView dans IB depuis Xcode 9, pas besoin de le faire dans le code.
Notez que votre cible de déploiement doit être supérieure à iOS 10, sinon vous obtiendrez une erreur de compilation.
la source
Dans XCode version 9.0.1, WKWebView est disponible sur Interface Builder.
la source
J'ai lié WebKit, maintenant ça marche!
la source
Je ne sais pas si cela aide, mais j'ai résolu le problème pour moi en incluant le framework WebKit pour la cible. Ne pas l'intégrer, lier simplement la référence. J'utilise toujours l'objet WebView dans IB et le dépose sur le ViewController dans lequel je l'intègre et je n'ai jamais eu de problème ...
J'ai travaillé sur 4 projets WKWebView MacOS maintenant et le WebView a fonctionné correctement dans chaque projet.
la source
Cela a fonctionné pour moi dans Xcode 7.2 ...
Ajoutez d'abord la vue Web en tant que sortie UIWebView dans le storyboard / IB. Cela vous donnera une propriété comme celle-ci:
Ensuite, modifiez simplement votre code pour le changer en WKWebView.
Vous devez également modifier la classe personnalisée en WKWebView dans l'inspecteur d'identité.
la source