Czy ktoś wie, jak naprawić ten błąd za pomocą Xcode 9 GM? Pracuję nad aplikacją stworzoną w Xcode 8.3, celem wdrożenia jest iOS 9.3 i nigdy wcześniej nie miałem tego problemu. Nie znalazłem jeszcze żadnych informacji tutaj ani na forach Apple :(
Edycja: ten błąd pojawił się, gdy umieściłem WKWebView w konstruktorze interfejsu, a nie, jeśli używam go programowo.
Edycja 2: Cóż, w końcu to nie jest błąd, zobacz odpowiedź Quinna poniżej, aby uzyskać więcej informacji na temat tego zachowania. Dziękuję mu za wyjaśnienie.
Odpowiedzi:
Błąd jest prawidłowym zachowaniem, a nie błędem w Xcode 9. Chociaż WKWebView został wprowadzony w iOS 8, był błąd,
-[WKWebView initWithCoder:]
który został naprawiony tylko w iOS 11, który zawsze zawieszał się w czasie wykonywania, a tym samym uniemożliwiał skonfigurowanie go w Interface Builder.https://bugs.webkit.org/show_bug.cgi?id=137160
Zamiast pozwalać programistom na budowanie czegoś w IB, co byłoby zepsute w czasie wykonywania, jest to błąd kompilacji. Jest to niewygodne ograniczenie, ponieważ iOS 11 został niedawno wydany, ale tak naprawdę nie ma innej dobrej opcji.
Obejściem problemu dla starszych celów wdrożenia jest kontynuowanie dodawania WKWebView w kodzie, jak @ fahad-ashraf już opisał w swojej odpowiedzi:
https://developer.apple.com/documentation/webkit/wkwebview
źródło
Wygląda na to, że jest to błąd w Xcode 9 i był również obecny w wersjach beta. Błąd kompilacji zostanie wyświetlony tylko wtedy, gdy tworzysz WKWebView za pomocą scenorysu. Jeśli progmatycznie utworzysz WKWebView w odpowiednim pliku klasy ViewController, powinieneś być w stanie zbudować na wersjach iOS poniżej iOS 11. Oto podejście podane w witrynie Apple, aby to osiągnąć:
Powinieneś być wtedy w stanie zaimplementować funkcjonalność WKWebView w normalny sposób.
Źródło: https://developer.apple.com/documentation/webkit/wkwebview
źródło
super.loadView()
super.loadView()
musi być na początku. Bez tego nic się nie pokazuje.webview
poniżej mojego paska nawigacji? To rozwiązanie działa, ale obejmuje cały ekran.Jeśli chcesz zrealizować zamówienie
UIViewController
z innymi komponentami dodatkowo, możesz utworzyć „kontener” poprzez scenorys o nazwie na przykładwebViewContainer
:źródło
[LayoutConstraints] Unable to simultaneously satisfy constraints
, nie zapomnij o liniiwebView.translatesAutoresizingMaskIntoConstraints = false
. Jeśli pozostawisz to ustawione na true, automatycznie utworzy cały zestaw ograniczeń,webView
które będą kolidować z ograniczeniami, które dodasz programowo. Apple Docs .Jeśli przeniesiesz się ze starszego celu do iOS 11.0 i nadal otrzymujesz ten błąd, użyj poniższego rozwiązania.
źródło
Napotkałem ten sam problem, ale można go rozwiązać, dodając programowo WKWebView .
Zrób dowolny projekt, który chcesz wykonać w scenorysie, ale zostaw miejsce na WKWebView , w tym obszarze przeciągnij i upuść widok i nazwij go jako webViewContainer i zadeklaruj te dwie właściwości,
Teraz utwórz i dodaj webView w ten sposób:
funkcja createWebView jest zadeklarowana jako,
Teraz dodaj ten nowo utworzony widok webView do swojego containerView, na przykład:
Na koniec po prostu załaduj swój adres URL w ten sposób,
Dzięki za przeczytanie tego.
źródło
WebKit został wprowadzony w iOS 8, ale został wydany z błędem, który spowodował awarię środowiska uruchomieniowego, jeśli używasz Xcode 9/10 , konfiguracja twojego projektu obsługuje mniej niż iOS 11 i jeśli próbujesz dodać WKWebView za pomocą kreatora interfejsu. Xcode natychmiast pokazuje błąd w czasie kompilacji.
WKWebView przed iOS 11.0 (obsługa NSCoding była zepsuta w poprzedniej wersji)
Chociaż WKWebView został wprowadzony w iOS 8 , wystąpił błąd w - [WKWebView initWithCoder:], który został naprawiony tylko w iOS 11 .
Rozwiązanie polega na tym, że musisz dodać WKWebView za pomocą kodu (tylko jeśli obsługujesz poniżej iOS 11). To faktycznie brzmi dziwnie.
Innym rozwiązaniem jest zmiana kompilacji dokumentów Interface Builder dla opcji na system iOS 11 lub nowszy (jeśli migrujesz ze starszego celu do systemu iOS 11 i nadal występuje ten sam błąd).
źródło
// Dla Swift
// Dla celu C
źródło
To powinien być komentarz do odpowiedzi Kampai, ale nie mam wystarczającej liczby punktów reputacji, aby to skomentować.
Oprócz jawnych wersji systemu iOS menu rozwijane „Kompilacje dla” w „Inspektorze plików” zawiera również opcję Cel wdrożenia (..) . Jeśli to możliwe, wolę zarządzać wersjami w jednym miejscu i mimo wszystko chciałem zmienić cel kompilacji. Byłem całkowicie zdezorientowany, ale nadal wskazywał cel wdrożenia (9.3), chociaż zmieniłem odpowiedni wpis w ustawieniach ogólnych na 11.0 .
Ponowne uruchomienie XCode (11.3.1) było konieczne, aby wszystko działało zgodnie z oczekiwaniami, dostępna była opcja „Cel wdrożenia (11.0)” (a 9.3 zniknął). Po dokonaniu selekcji wszystko działało zgodnie z oczekiwaniami.
źródło
źródło
UIWebView jest przestarzałe w iOS11, a WKWebView działa tylko w iOS11 - to brzmi jak błąd w Xcode GM.
źródło