Es scheint, dass die IB-Objektvorlagen in XCode 6 Beta immer noch Objekte im alten Stil erstellen (UIWebView für iOS und WebView für OSX). Hoffentlich wird Apple sie für das moderne WebKit aktualisieren, aber was ist bis dahin der beste Weg, um WKWebViews in Interface Builder zu erstellen? Sollte ich eine Basisansicht (UIView oder NSView) erstellen und ihren Typ WKWebView zuweisen? Die meisten Beispiele, die ich online finde, fügen es programmgesteuert einer Containeransicht hinzu. ist das aus irgendeinem Grund besser?
95
Antworten:
Sie haben Recht - es scheint nicht zu funktionieren. Wenn Sie in die Überschriften schauen, sehen Sie:
was bedeutet, dass Sie keine von einer Feder instanziieren können.
Sie müssen dies manuell in viewDidLoad oder loadView tun.
quelle
Wie bereits von einigen erwähnt, ist WKWebView ab Xcode 6.4 im Interface Builder immer noch nicht verfügbar. Es ist jedoch sehr einfach, sie per Code hinzuzufügen.
Ich verwende dies nur in meinem ViewController. Interface Builder überspringen
quelle
self.view
InnerenloadView()
führt zu einer unendlichen Rekursion. Das Festlegen der Ansicht ist dagegen nicht nur zulässig, sondern auch erforderlich (manuell oder durch Verketten ansuper
. Andernfalls wird sie so lange aufgerufen, wie die Ansicht angezeigt wirdnil
).Info.plist
Fügen Sie Ihre Info.plist-Transportsicherheitseinstellung hinzu
Xcode 9.1+
Sie finden das WKWebView-Element in der Objektbibliothek.
quelle
WebView
. crx_au Antwort ist überlegenMit Xcode 8 ist dies jetzt möglich, aber die Mittel, um dies zu erreichen, sind gelinde gesagt ein wenig hackig. Aber hey, eine funktionierende Lösung ist eine funktionierende Lösung, oder? Lassen Sie mich erklären.
WKWebViews initWithCoder: wird nicht mehr als "NS_UNAVAILABLE" bezeichnet. Es sieht jetzt wie unten gezeigt aus.
Beginnen Sie mit der Unterklasse von WKWebView und überschreiben Sie initWithCoder. Anstatt super initWithCoder aufzurufen, müssen Sie eine andere init-Methode verwenden, z. B. initWithFrame: configuration:. Kurzes Beispiel unten.
Verwenden Sie in Ihrem Storyboard eine UIView und geben Sie ihr eine benutzerdefinierte Klasse Ihrer neuen Unterklasse. Der Rest ist wie gewohnt (Festlegen von Einschränkungen für das automatische Layout, Verknüpfen der Ansicht mit einer Steckdose in einem Controller usw.).
Schließlich skaliert WKWebView den Inhalt anders als UIWebView. Viele Leute werden wahrscheinlich den einfachen Ratschlägen in Unterdrücken von WKWebView folgen wollen, indem sie Inhalte skalieren, um sie mit der gleichen Vergrößerung wie UIWebView zu rendern , damit WKWebView das UIWebView-Verhalten in dieser Hinsicht genauer verfolgt.
quelle
self = [super initWithFrame:myFrame configuration:myConfiguration];
wenn Sie Einschränkungen verwenden, vergessen Sie nicht zu setzenself.translatesAutoresizingMaskIntoConstraints = NO;
Hier ist eine einfache Swift 3-Version, die auf der hervorragenden Antwort von crx_au basiert .
Erstellen Sie eine UIView in Interface Builder, weisen Sie Ihre Einschränkungen zu und weisen Sie sie
WKWebView_IBWrapper
wie folgt als benutzerdefinierte Klasse zu:quelle
Wenn dieses Problem in neueren Versionen von Xcode, z. B. Version 9.2 +, weiterhin auftritt, importieren Sie einfach Webkit in Ihren ViewController:
Vor dem Fix:
Nach dem Fix:
quelle
Dies ist jetzt anscheinend in Xcode 9b4 behoben. In den Versionshinweisen heißt es: "WKWebView ist in der iOS-Objektbibliothek verfügbar."
Ich habe nicht genauer nachgesehen, ob iOS 11 erforderlich oder abwärtskompatibel ist.
quelle
Sie können eine WKWebView in IB seit Xcode 9 instanziieren und konfigurieren, ohne dies im Code tun zu müssen.
Beachten Sie, dass Ihr Bereitstellungsziel höher als iOS 10 sein muss, da sonst ein Fehler beim Kompilieren angezeigt wird.
quelle
In XCode Version 9.0.1 ist WKWebView im Interface Builder verfügbar.
quelle
Ich habe WebKit verlinkt, jetzt funktioniert es!
quelle
Ich bin mir nicht sicher, ob dies hilft, aber ich habe das Problem für mich gelöst, indem ich das WebKit-Framework für das Ziel aufgenommen habe. Betten Sie es nicht ein, sondern verknüpfen Sie einfach die Referenz. Ich verwende das WebView-Objekt immer noch in IB und lege es auf dem ViewController ab, in den ich es einbette, und ich hatte nie ein Problem ...
Ich habe jetzt an 4 WKWebView MacOS-Projekten gearbeitet und das WebView hat in jedem Projekt ordnungsgemäß funktioniert.
quelle
Das hat bei mir in Xcode 7.2 funktioniert ...
Fügen Sie zuerst die Webansicht als UIWebView-Ausgang im Storyboard / IB hinzu. Dadurch erhalten Sie eine Eigenschaft wie diese:
Bearbeiten Sie dann einfach Ihren Code, um ihn in eine WKWebView zu ändern.
Sie sollten die benutzerdefinierte Klasse auch im Identitätsinspektor in WKWebView ändern.
quelle