Alguém sabe como corrigir esse erro com o Xcode 9 GM? Estou trabalhando em um aplicativo criado com o Xcode 8.3, o destino de implantação é o iOS 9.3 e nunca tive esse problema antes. Ainda não encontro informações aqui ou nos fóruns da Apple :(
Edit: Este erro ocorreu quando eu coloquei um WKWebView no construtor de interfaces, não se eu o usar programaticamente.
Edit 2: Bem, finalmente não é um bug, veja a resposta de Quinn abaixo para obter mais informações sobre esse comportamento. Obrigado a ele pela explicação.
Respostas:
O erro é o comportamento correto, e não um bug no Xcode 9. Embora o WKWebView tenha sido introduzido no iOS 8, havia um bug
-[WKWebView initWithCoder:]
corrigido apenas no iOS 11, que sempre travava no tempo de execução e, portanto, impedia a configuração de um no Interface Builder.https://bugs.webkit.org/show_bug.cgi?id=137160
Em vez de permitir que os desenvolvedores criem algo no IB que seria quebrado no tempo de execução, é um erro de compilação. É uma limitação inconveniente, já que o iOS 11 foi lançado recentemente, mas não há outra boa opção.
A solução alternativa para destinos de implantação mais antigos é continuar adicionando o WKWebView no código, como @ fahad-ashraf já descrito em sua resposta:
https://developer.apple.com/documentation/webkit/wkwebview
fonte
Isso parece ser um bug no Xcode 9 e também estava presente nos betas. Você só receberá o erro de construção se estiver criando um WKWebView através do storyboard. Se você criar progressivamente o WKWebView no arquivo de classe ViewController correspondente, poderá criar versões do iOS abaixo do iOS 11. Aqui está a abordagem fornecida no site da Apple para saber como fazer isso:
Você poderá implementar a funcionalidade WKWebView como faria normalmente.
Fonte: https://developer.apple.com/documentation/webkit/wkwebview
fonte
super.loadView()
super.loadView()
tem que estar no começo. Sem ele, nada mostra.webview
abaixo da minha NavigationBar? Essa solução funciona, mas cobre a tela inteira.Se você deseja realizar um costume
UIViewController
com outros componentes, pode criar um "contêiner" através do storyboard chamado, por exemplowebViewContainer
:fonte
[LayoutConstraints] Unable to simultaneously satisfy constraints
, não esqueça a linhawebView.translatesAutoresizingMaskIntoConstraints = false
. Se você deixar definido como verdadeiro, ele criará um conjunto inteiro de restriçõeswebView
automaticamente, o que entrará em conflito com as restrições adicionadas programaticamente. Documentos da Apple .Se você passou do destino mais antigo para o iOS 11.0 e ainda está recebendo esse erro, use a solução abaixo.
fonte
Eu enfrentei o mesmo problema, mas ele pode ser resolvido se adicionarmos o WKWebView programaticamente.
Faça o design que você deseja criar no storyboard, mas deixe o espaço para o WKWebView ; nessa área, arraste e solte uma visualização e nomeie-a como webViewContainer e declare essas duas propriedades,
Agora crie e adicione o webView da seguinte maneira:
A função createWebView é declarada como,
Agora adicione este webView recém-criado ao seu containerView, desta forma:
Por fim, basta carregar seu URL assim,
Obrigado por ler isso.
fonte
O WebKit foi introduzido no iOS 8, mas foi lançado com um erro que causava uma falha de tempo de execução. Se você estiver usando o Xcode 9/10 , a configuração do seu projeto suporta menos do que o iOS 11 e se você estiver tentando adicionar o WKWebView usando o construtor de interface. O Xcode mostra imediatamente um erro em tempo de compilação.
WKWebView antes do iOS 11.0 (o suporte a NSCoding foi quebrado na versão anterior)
Embora o WKWebView tenha sido introduzido no iOS 8 , houve um erro em - [WKWebView initWithCoder:] que foi corrigido apenas no iOS 11 .
A resolução é que você deve adicionar o WKWebView através do código (somente se você estiver suportando abaixo do iOS 11). Isso realmente soa estranho.
Outra solução é alterar as compilações de documentos do Interface Builder para a opção iOS 11 e posterior (se você estiver migrando do destino mais antigo para o iOS 11 e ainda obtendo o mesmo erro).
fonte
// Para Swift
// Para o objetivo C
fonte
Deve ser um comentário à resposta de Kampai, mas não tenho pontos de reputação suficientes para comentar.
Além das versões explícitas do iOS, o menu suspenso 'Constrói para' no 'Inspetor de arquivos' também contém a opção Destino de implantação (..) . Prefiro gerenciar versões em um único local, se possível, e desejava alterar o destino da compilação de qualquer maneira. Fiquei totalmente confuso, pois ainda dizia Destino de Implantação (9.3), embora eu tenha alterado a entrada correspondente nas configurações gerais para 11.0 .
A reinicialização do XCode (11.3.1) era necessária para que tudo funcionasse conforme o esperado, a opção 'Destino de Implantação (11.0)' estava disponível (e 9.3 desapareceu). Após a seleção, tudo funcionou como esperado.
fonte
fonte
O UIWebView foi descontinuado no iOS11 e o WKWebView funciona apenas no iOS11 - isso soa como um bug no Xcode GM.
fonte