Quelqu'un sait-il comment corriger cette erreur avec Xcode 9 GM? Je travaille sur une application réalisée avec Xcode 8.3, la cible de déploiement est pour iOS 9.3 et je n'ai jamais eu ce problème auparavant. Je ne trouve pas encore d'informations ici ou sur les forums Apple :(
Edit: Cette erreur est survenue lorsque j'ai mis un WKWebView dans le générateur d'interface, pas si je l'utilise par programme.
Edit 2: Eh bien, ce n'est finalement pas un bug, voir la réponse de Quinn ci-dessous pour avoir plus d'informations sur ce comportement. Merci à lui pour l'explication.
Réponses:
L'erreur est un comportement correct, et non un bogue dans Xcode 9. Bien que WKWebView ait été introduit dans iOS 8, il y avait un bogue
-[WKWebView initWithCoder:]
qui n'a été corrigé que dans iOS 11, qui plantait toujours à l'exécution et empêchait donc d'en configurer un dans Interface Builder.https://bugs.webkit.org/show_bug.cgi?id=137160
Plutôt que de permettre aux développeurs de créer quelque chose dans IB qui serait cassé au moment de l'exécution, il s'agit d'une erreur de construction. C'est une limitation gênante puisque iOS 11 n'a été publié que récemment, mais il n'y a vraiment pas d'autre bonne option.
La solution de contournement pour les anciennes cibles de déploiement est de continuer à ajouter le WKWebView dans le code, comme @ fahad-ashraf déjà décrit dans sa réponse:
https://developer.apple.com/documentation/webkit/wkwebview
la source
Cela semble être un bogue dans Xcode 9 et était également présent dans les bêtas. Vous n'obtiendrez l'erreur de construction que si vous créez un WKWebView via le storyboard. Si vous créez progressivement le WKWebView dans le fichier de classe ViewController correspondant, vous devriez pouvoir construire sur des versions iOS inférieures à iOS 11. Voici l'approche donnée sur le site Web d'Apple pour savoir comment y parvenir:
Vous devriez alors être en mesure d'implémenter la fonctionnalité WKWebView comme vous le feriez normalement.
Source: https://developer.apple.com/documentation/webkit/wkwebview
la source
super.loadView()
super.loadView()
doit être au début. Sans cela, rien ne se voit.webview
sous ma barre de navigation? Cette solution de vous fonctionne mais elle couvre tout l'écran.Si vous souhaitez réaliser un custom
UIViewController
avec d'autres composants en plus vous pouvez créer un "container" à travers le storyboard appelé par exemplewebViewContainer
:la source
[LayoutConstraints] Unable to simultaneously satisfy constraints
, n'oubliez pas la lignewebView.translatesAutoresizingMaskIntoConstraints = false
. Si vous laissez la valeur true, cela créerawebView
automatiquement tout un ensemble de contraintes qui entreront en conflit avec les contraintes que vous ajoutez par programme. Documents Apple .Si vous êtes déplacé de l'ancienne cible vers iOS 11.0 et que vous obtenez toujours cette erreur, utilisez la solution ci-dessous.
la source
J'ai rencontré le même problème mais il peut être résolu si nous ajoutons résolu WKWebView par programme.
Faites la conception que vous voulez faire dans le storyboard mais laissez la place à WKWebView , dans cette zone, faites glisser et déposez une vue et nommez-la webViewContainer et déclarez ces deux propriétés,
Maintenant, créez et ajoutez webView comme ceci:
La fonction createWebView est déclarée comme,
Ajoutez maintenant cette webView nouvellement créée à votre containerView, comme ceci:
Enfin, chargez simplement votre URL comme ceci,
Merci d'avoir lu ceci.
la source
WebKit a été introduit dans iOS 8 mais il a été publié avec une erreur qui a provoqué un crash d'exécution.Si vous utilisez Xcode 9/10 , la configuration de votre projet prend en charge moins d' iOS 11 et si vous essayez d'ajouter WKWebView à l'aide du générateur d'interface. Xcode affiche immédiatement une erreur de compilation.
WKWebView avant iOS 11.0 (la prise en charge de NSCoding était interrompue dans la version précédente)
Bien que WKWebView ait été introduit dans iOS 8 , il y avait un bogue dans - [WKWebView initWithCoder:] qui n'a été corrigé que dans iOS 11 .
La résolution est que vous devez ajouter WKWebView via le code (uniquement si vous prenez en charge sous iOS 11). Cela semble en fait étrange.
Une autre solution consiste à modifier les versions de document Interface Builder pour l'option vers iOS 11 et versions ultérieures (si vous migrez d'une cible plus ancienne vers iOS 11 et que vous obtenez toujours la même erreur).
la source
// Pour Swift
// Pour l'objectif C
la source
Cela devrait être un commentaire sur la réponse de Kampai, mais je n'ai pas assez de points de réputation pour commenter.
Outre les versions iOS explicites, la liste déroulante «Construit pour» dans «l'inspecteur de fichiers» contient également l' option Cible de déploiement (..) . Je préfère gérer les versions à un seul endroit si possible et je voulais quand même changer la cible de construction. J'étais complètement confus, il disait toujours cible de déploiement (9.3) bien que j'aie changé l'entrée correspondante dans les paramètres généraux en 11.0 .
Le redémarrage de XCode (11.3.1) était nécessaire pour que tout fonctionne comme prévu, l'option 'Deployment Target (11.0)' était disponible (et 9.3 avait disparu). Après la sélection, tout a fonctionné comme prévu.
la source
la source
UIWebView est obsolète dans iOS11 et WKWebView fonctionne uniquement dans iOS11 - cela ressemble à un bogue dans Xcode GM.
la source