Wygląda na to, że szablony obiektów IB w XCode 6 beta nadal tworzą obiekty w starym stylu (UIWebView dla iOS i WebView dla OSX). Mam nadzieję, że Apple zaktualizuje je pod kątem nowoczesnego WebKit, ale do tego czasu, jaki jest najlepszy sposób tworzenia WKWebViews w Interface Builder? Czy powinienem utworzyć widok podstawowy (UIView lub NSView) i przypisać jego typ do WKWebView? Większość przykładów, które znajduję w Internecie, dodaje je programowo do widoku kontenera; czy to jest lepsze z jakiegoś powodu?
95
Odpowiedzi:
Masz rację - to nie działa. Jeśli spojrzysz na nagłówki, zobaczysz:
co oznacza, że nie można utworzyć instancji z końcówki.
Będziesz musiał to zrobić ręcznie w viewDidLoad lub loadView.
źródło
Jak zauważyli niektórzy, od Xcode 6.4 WKWebView nadal nie jest dostępny w Interface Builder. Jednak bardzo łatwo jest je dodać za pomocą kodu.
Po prostu używam tego w moim ViewController. Pomijanie kreatora interfejsów
źródło
self.view
wnętrzaloadView()
prowadzi do nieskończonej rekurencji. Z drugiej strony ustawienie widoku jest nie tylko dozwolone, ale wręcz wymagane (ręcznie lub przez połączenie łańcuchowesuper
. W przeciwnym razie będzie wywoływane tak długo, jak widok jestnil
).Info.plist
dodaj swoje ustawienia bezpieczeństwa transportu Info.plist
Xcode 9.1+
Element WKWebView można znaleźć w bibliotece obiektów.
źródło
WebView
. Odpowiedź crx_au jest lepszaDzięki Xcode 8 jest to teraz możliwe, ale środki do osiągnięcia tego są co najmniej trochę hakerskie. Ale hej, działające rozwiązanie to działające rozwiązanie, prawda? Pozwól mi wyjaśnić.
WKWebView initWithCoder: nie ma już adnotacji „NS_UNAVAILABLE”. Teraz wygląda tak, jak pokazano poniżej.
Zacznij od podklasy WKWebView i zastąp initWithCoder. Zamiast wywoływać super initWithCoder, musisz użyć innej metody init, takiej jak initWithFrame: configuration :. Krótki przykład poniżej.
W swoim Storyboard użyj UIView i nadaj mu niestandardową klasę swojej nowej podklasy. Reszta to zwykły biznes (ustawienie ograniczeń automatycznego układu, połączenie widoku z gniazdem w kontrolerze itp.).
Wreszcie WKWebView skaluje zawartość inaczej niż UIWebView. Wiele osób prawdopodobnie będzie chciało postępować zgodnie z prostą radą w Pomijanie WKWebView ze skalowania zawartości w celu renderowania przy takim samym powiększeniu, jak robi to UIWebView, aby WKWebView dokładniej podążał za zachowaniem UIWebView w tym zakresie.
źródło
self = [super initWithFrame:myFrame configuration:myConfiguration];
również, jeśli używasz ograniczeń, nie zapomnij ustawićself.translatesAutoresizingMaskIntoConstraints = NO;
Oto prosta wersja Swift 3 oparta na doskonałej odpowiedzi crx_au .
Utwórz UIView w Interface Builder, przypisz swoje ograniczenia i przypisz je
WKWebView_IBWrapper
jako klasę niestandardową, na przykład:źródło
Jeśli nadal napotykasz ten problem w ostatnich wersjach Xcode, tj. W wersji 9.2 +, po prostu zaimportuj Webkit do swojego ViewController:
Przed naprawą:
Po naprawie:
źródło
Zostało to najwyraźniej naprawione w Xcode 9b4. W informacjach o wersji jest napisane „WKWebView jest dostępny w bibliotece obiektów iOS”.
Nie szukałem głębiej, aby sprawdzić, czy wymaga iOS 11, czy jest jeszcze kompatybilny wstecz.
źródło
Możesz utworzyć wystąpienie i skonfigurować WKWebView w IB od Xcode 9, nie musisz robić tego w kodzie.
Należy pamiętać, że cel wdrożenia musi być wyższy niż iOS 10, w przeciwnym razie wystąpi błąd w czasie kompilacji.
źródło
W XCode w wersji 9.0.1 WKWebView jest dostępny w Interface Builder.
źródło
Połączyłem WebKit, teraz działa!
źródło
Nie jestem pewien, czy to pomoże, ale rozwiązałem problem, dołączając framework WebKit do celu. Nie osadzaj go, tylko połącz odnośnik. Nadal używam obiektu WebView w IB i upuszczam go na ViewController, w którym go osadzam i nigdy nie miałem problemu ...
Pracowałem teraz nad 4 projektami WKWebView MacOS i WebView działał poprawnie w każdym projekcie.
źródło
To działało dla mnie w Xcode 7.2 ...
Najpierw dodaj widok sieci Web jako gniazdo UIWebView w serii ujęć / IB. W ten sposób uzyskasz taką właściwość:
Następnie po prostu edytuj kod, aby zmienić go na WKWebView.
Należy również zmienić klasę niestandardową na WKWebView w Inspektorze tożsamości.
źródło