Tampaknya template objek IB di XCode 6 beta masih membuat objek gaya lama (UIWebView untuk iOS dan WebView untuk OSX). Mudah-mudahan Apple akan memperbaruinya untuk WebKit modern, tetapi sampai saat itu, apa cara terbaik untuk membuat WKWebView di Interface Builder? Haruskah saya membuat tampilan dasar (UIView atau NSView) dan menetapkan tipenya ke WKWebView? Sebagian besar contoh yang saya temukan online menambahkannya ke tampilan penampung secara terprogram; apakah itu lebih baik untuk beberapa alasan?
95
Jawaban:
Anda benar - sepertinya tidak berhasil. Jika Anda melihat di header, Anda akan melihat:
yang menyiratkan bahwa Anda tidak dapat membuat instance dari ujung pena.
Anda harus melakukannya dengan tangan di viewDidLoad atau loadView.
sumber
Seperti yang ditunjukkan oleh beberapa orang, pada Xcode 6.4, WKWebView masih belum tersedia di Interface Builder. Namun, sangat mudah untuk menambahkannya melalui kode.
Saya hanya menggunakan ini di ViewController saya. Melewati pembuat Antarmuka
sumber
self.view
dalamloadView()
inilah yang mengarah pada rekursi tak terbatas. Sebaliknya, menyetel tampilan tidak hanya diperbolehkan tetapi memang diperlukan (secara manual, atau dengan merangkai kesuper
. Jika tidak, ia akan tetap dipanggil selama tampilan tersebutnil
).Info.plist
tambahkan pengaturan keamanan transportasi Info.plist Anda
Xcode 9.1+
Anda bisa menemukan elemen WKWebView di perpustakaan Object.
sumber
WebView
. Tanggapan crx_au lebih unggulDengan Xcode 8 sekarang ini mungkin, tetapi cara untuk mencapainya sedikit rumit untuk sedikitnya. Tapi, hei, solusi yang berhasil adalah solusi yang berhasil, bukan? Biar saya jelaskan.
InitWithCoder WKWebView: tidak lagi dianotasi sebagai "NS_UNAVAILABLE". Sekarang terlihat seperti yang ditunjukkan di bawah ini.
Mulailah dengan membuat subkelas WKWebView dan mengganti initWithCoder. Alih-alih memanggil super initWithCoder, Anda harus menggunakan metode init yang berbeda, seperti initWithFrame: configuration :. Contoh cepat di bawah ini.
Di Storyboard Anda, gunakan UIView dan berikan kelas kustom dari subclass baru Anda. Sisanya adalah bisnis seperti biasa (menyetel batasan tata letak otomatis, menghubungkan tampilan ke outlet di pengontrol, dll).
Terakhir, WKWebView menskalakan konten secara berbeda dengan UIWebView. Banyak orang mungkin ingin mengikuti saran sederhana di Suppress WKWebView dari penskalaan konten untuk merender pada pembesaran yang sama seperti yang dilakukan UIWebView untuk membuat WKWebView lebih dekat mengikuti perilaku UIWebView dalam hal ini.
sumber
self = [super initWithFrame:myFrame configuration:myConfiguration];
juga jika Anda menggunakan batasan, jangan lupa untuk mengaturself.translatesAutoresizingMaskIntoConstraints = NO;
Ini adalah versi Swift 3 sederhana berdasarkan jawaban crx_au yang sangat baik.
Buat UIView di Interface Builder, tetapkan batasan Anda, dan tetapkan
WKWebView_IBWrapper
sebagai kelas khusus, seperti:sumber
Jika Anda masih menghadapi masalah ini di versi Xcode terbaru, yaitu v9.2 +, cukup impor Webkit ke ViewController Anda:
Sebelum perbaikan:
Setelah perbaikan:
sumber
Ini sekarang tampaknya diperbaiki di Xcode 9b4. Catatan rilis mengatakan "WKWebView tersedia di perpustakaan objek iOS".
Saya belum melihat lebih dalam untuk melihat apakah itu membutuhkan iOS 11 atau kompatibel ke belakang.
sumber
Anda dapat membuat instance dan mengkonfigurasi WKWebView di IB sejak Xcode 9, tidak perlu melakukannya dalam kode.
Perhatikan bahwa target penerapan Anda harus lebih tinggi dari iOS 10 atau Anda akan mendapatkan kesalahan waktu kompilasi.
sumber
Dalam XCode Versi 9.0.1 WKWebView tersedia di Interface Builder.
sumber
Saya telah menautkan WebKit, sekarang berfungsi!
sumber
Tidak yakin apakah ini membantu tetapi saya memecahkan masalah untuk saya dengan menyertakan kerangka kerja WebKit untuk target. Jangan sematkan, cukup tautkan referensi. Saya masih menggunakan objek WebView di IB dan meletakkannya di ViewController tempat saya menyematkannya dan saya tidak pernah mengalami masalah ...
Saya telah mengerjakan 4 proyek MacOS WKWebView sekarang dan WebView telah bekerja dengan baik di setiap proyek.
sumber
Ini berhasil untuk saya di Xcode 7.2 ...
Pertama tambahkan tampilan web sebagai outlet UIWebView di storyboard / IB. Ini akan memberi Anda properti seperti ini:
Kemudian edit kode Anda untuk mengubahnya menjadi WKWebView.
Anda juga harus mengubah kelas khusus menjadi WKWebView di inspektur Identitas.
sumber