Parece que os modelos de objeto IB no XCode 6 beta ainda estão criando objetos de estilo antigo (UIWebView para iOS e WebView para OSX). Esperançosamente, a Apple irá atualizá-los para o WebKit moderno, mas até então, qual é a melhor maneira de criar WKWebViews no Interface Builder? Devo criar uma exibição básica (UIView ou NSView) e atribuir seu tipo a WKWebView? A maioria dos exemplos que encontro online o adiciona a uma visualização de contêiner de forma programática; isso é melhor por algum motivo?
95
Respostas:
Você está correto - não parece funcionar. Se você olhar nos cabeçalhos, verá:
o que implica que você não pode instanciar um de um bico.
Você terá que fazer isso manualmente em viewDidLoad ou loadView.
fonte
Como apontado por alguns, a partir do Xcode 6.4, WKWebView ainda não está disponível no Interface Builder. No entanto, é muito fácil adicioná-los via código.
Estou apenas usando isso no meu ViewController. Skipping Interface builder
fonte
self.view
internamenteloadView()
é o que leva à recursão infinita. Definir a visualização, por outro lado, não é apenas permitido, mas também obrigatório (manualmente ou por encadeamentosuper
. Caso contrário, continuará sendo chamado enquanto a visualização fornil
).Info.plist
adicione em sua configuração de segurança de transporte Info.plist
Xcode 9.1+
Você pode encontrar o elemento WKWebView na biblioteca de objetos.
fonte
WebView
. A resposta de crx_au é superiorCom o Xcode 8 isso agora é possível, mas o meio de alcançá-lo é um pouco hacky, para dizer o mínimo. Mas hey, uma solução funcional é uma solução funcional, certo? Deixe-me explicar.
InitWithCoder de WKWebView: não está mais anotado como "NS_UNAVAILABLE". Agora se parece com o mostrado abaixo.
Comece criando uma subclasse de WKWebView e substitua initWithCoder. Em vez de chamar super initWithCoder, você precisará usar um método init diferente, como initWithFrame: configuration :. Exemplo rápido abaixo.
Em seu Storyboard, use um UIView e dê a ele uma classe personalizada de sua nova subclasse. O resto é business as usual (definir restrições de layout automático, vincular a visualização a uma saída em um controlador, etc.).
Finalmente, WKWebView dimensiona o conteúdo de maneira diferente para UIWebView. Muitas pessoas provavelmente vão querer seguir o conselho simples em Suprimir WKWebView do escalonamento do conteúdo para renderizar na mesma ampliação que o UIWebView faz para fazer com que o WKWebView siga mais de perto o comportamento do UIWebView a esse respeito.
fonte
self = [super initWithFrame:myFrame configuration:myConfiguration];
também se você usar restrições, não se esqueça de definirself.translatesAutoresizingMaskIntoConstraints = NO;
Aqui está uma versão simples do Swift 3 baseada na excelente resposta de crx_au .
Crie um UIView no Interface Builder, atribua suas restrições e atribua-o
WKWebView_IBWrapper
como uma classe personalizada, assim:fonte
Se você ainda enfrenta esse problema nas versões recentes do Xcode, ou seja, v9.2 +, basta importar o Webkit para o seu ViewController:
Antes da correção:
Após a correção:
fonte
Isso agora está aparentemente corrigido no Xcode 9b4. As notas de lançamento dizem "WKWebView está disponível na biblioteca de objetos iOS."
Não olhei mais fundo para ver se ele requer iOS 11 ou é compatível com versões anteriores.
fonte
Você pode instanciar e configurar um WKWebView no IB desde o Xcode 9, sem necessidade de fazer isso no código.
Observe que seu destino de implantação deve ser superior ao iOS 10 ou você obterá um erro de tempo de compilação.
fonte
No XCode Versão 9.0.1, WKWebView está disponível no Interface Builder.
fonte
Vinculei o WebKit, agora está funcionando!
fonte
Não tenho certeza se isso ajuda, mas resolvi o problema para mim incluindo a estrutura do WebKit para o destino. Não incorpore, apenas vincule a referência. Eu ainda uso o objeto WebView no IB e coloco-o no ViewController no qual estou incorporando e nunca tive um problema ...
Eu trabalhei em 4 projetos WKWebView MacOS agora e o WebView funcionou corretamente em cada projeto.
fonte
Isso funcionou para mim no Xcode 7.2 ...
Primeiro adicione a visualização da web como uma saída UIWebView no storyboard / IB. Isso lhe dará uma propriedade como esta:
Em seguida, edite o código para alterá-lo para WKWebView.
Você também deve alterar a classe personalizada para WKWebView no inspetor de identidade.
fonte