Похоже, что шаблоны объектов IB в бета-версии XCode 6 все еще создают объекты старого стиля (UIWebView для iOS и WebView для OSX). Надеюсь, Apple обновит их до современного WebKit, но до тех пор, как лучше всего создавать WKWebView в Interface Builder? Должен ли я создать базовое представление (UIView или NSView) и присвоить его тип WKWebView? Большинство примеров, которые я нахожу в Интернете, добавляют его в представление контейнера программно; это лучше по какой-то причине?
95
Ответы:
Вы правы - похоже, это не работает. Если вы посмотрите в заголовки, вы увидите:
что означает, что вы не можете создать экземпляр из пера.
Вам нужно будет сделать это вручную в viewDidLoad или loadView.
источник
Как отмечают некоторые, начиная с Xcode 6.4, WKWebView все еще недоступен в Interface Builder. Однако их очень легко добавить с помощью кода.
Я просто использую это в своем ViewController. Пропуск построителя интерфейса
источник
self.view
внутрьloadView()
приводит к бесконечной рекурсии. С другой стороны, установка представления не только разрешена, но и действительно необходима (вручную или путем привязки кsuper
. В противном случае она будет вызываться, пока есть представлениеnil
).Info.plist
добавьте в свой Info.plist настройку безопасности транспорта
Xcode 9.1+
Вы можете найти элемент WKWebView в библиотеке объектов.
источник
WebView
. crx_au отвечает превосходноС Xcode 8 это теперь возможно, но средства достижения этого, мягко говоря, немного хакерские. Но эй, рабочее решение - это рабочее решение, верно? Позволь мне объяснить.
WKWebView initWithCoder: больше не аннотируется как «NS_UNAVAILABLE». Теперь это выглядит так, как показано ниже.
Начните с создания подкласса WKWebView и переопределите initWithCoder. Вместо вызова super initWithCoder вам потребуется использовать другой метод инициализации, например initWithFrame: configuration :. Быстрый пример ниже.
В вашей раскадровке используйте UIView и дайте ему собственный класс вашего нового подкласса. Остальное - обычное дело (установка ограничений автоматического макета, привязка представления к выходу в контроллере и т. Д.).
Наконец, WKWebView масштабирует контент иначе, чем UIWebView. Многие люди, вероятно, захотят последовать простому совету в Запретить WKWebView масштабировать контент для рендеринга с тем же увеличением, что и UIWebView, чтобы WKWebView более внимательно следил за поведением UIWebView в этом отношении.
источник
self = [super initWithFrame:myFrame configuration:myConfiguration];
если вы используете ограничения, не забудьте установитьself.translatesAutoresizingMaskIntoConstraints = NO;
Вот простая версия Swift 3, основанная на отличном ответе crx_au .
Создайте UIView в Интерфейсном Разработчике, назначьте свои ограничения и назначьте его
WKWebView_IBWrapper
как настраиваемый класс, например:источник
Если вы все еще сталкиваетесь с этой проблемой в последних версиях Xcode, то есть v9.2 +, просто импортируйте Webkit в свой ViewController:
Перед исправлением:
После исправления:
источник
Теперь это, по-видимому, исправлено в Xcode 9b4. В примечаниях к выпуску говорится, что «WKWebView доступен в библиотеке объектов iOS».
Я еще не смотрел глубже, чтобы узнать, требуется ли для этого iOS 11 или она обратно совместима.
источник
Вы можете создать и настроить WKWebView в IB, начиная с Xcode 9, нет необходимости делать это в коде.
Обратите внимание, что ваша цель развертывания должна быть выше, чем iOS 10, иначе вы получите ошибку времени компиляции.
источник
В XCode версии 9.0.1 WKWebView доступен в Interface Builder.
источник
Подключил WebKit, теперь он работает!
источник
Не уверен, что это поможет, но я решил проблему за себя, включив фреймворк WebKit для цели. Не вставляйте просто ссылку. Я все еще использую объект WebView в IB и перетаскиваю его на ViewController, в который я его встраиваю, и у меня никогда не было проблем ...
Я работал над 4 проектами WKWebView MacOS, и WebView работал правильно в каждом проекте.
источник
Это сработало для меня в Xcode 7.2 ...
Сначала добавьте веб-представление в качестве выхода UIWebView в раскадровке / IB. Это даст вам такое свойство:
Затем просто отредактируйте свой код, чтобы изменить его на WKWebView.
Вы также должны изменить настраиваемый класс на WKWebView в инспекторе удостоверений.
источник