Кто-нибудь знает, как исправить эту ошибку с Xcode 9 GM? Я работаю над приложением, созданным с помощью Xcode 8.3, цель развертывания - для iOS 9.3, и у меня никогда не было этой проблемы раньше. Я не нахожу никакой информации здесь или на форумах Apple, пока :(
Изменить: эта ошибка возникла, когда я поместил WKWebView в конструктор интерфейса, а не, если я использую его программно.
Изменить 2: Ну, это, наконец, не ошибка, см. Ответ Куинн ниже, чтобы получить больше информации об этом поведении. Спасибо ему за объяснение.
Ответы:
Ошибка - правильное поведение, а не ошибка в Xcode 9. Хотя WKWebView был представлен в iOS 8, была ошибка,
-[WKWebView initWithCoder:]
которая была исправлена только в iOS 11, которая всегда приводила к сбою во время выполнения и, таким образом, препятствовала его настройке в Интерфейсном Разработчике.https://bugs.webkit.org/show_bug.cgi?id=137160
Вместо того, чтобы позволять разработчикам создавать что-то в IB, которое будет сломано во время выполнения, это ошибка сборки. Это неудобное ограничение, поскольку iOS 11 была выпущена совсем недавно, но другого хорошего варианта действительно нет.
Обходной путь для более старых целей развертывания состоит в том, чтобы продолжать добавлять WKWebView в код, как @fahad-ashraf уже описал в своем ответе:
https://developer.apple.com/documentation/webkit/wkwebview
источник
Это, кажется, ошибка в Xcode 9 и также присутствовала в бета-версиях. Вы получите только ошибку сборки, если создаете WKWebView через раскадровку. Если вы постепенно создадите WKWebView в соответствующем файле класса ViewController, вы сможете использовать версии iOS ниже iOS 11. Вот подход, предложенный на веб-сайте Apple, для достижения этой цели:
После этого вы сможете реализовать функциональность WKWebView, как обычно.
Источник: https://developer.apple.com/documentation/webkit/wkwebview
источник
super.loadView()
super.loadView()
должно быть в начале. Без этого ничего не показывает.webview
ниже моего NavigationBar? Это ваше решение работает, но оно охватывает весь экран.Если вы хотите реализовать кастом
UIViewController
с другими компонентами в дополнение, вы можете создать «контейнер» через раскадровку, которая называется, напримерwebViewContainer
:источник
[LayoutConstraints] Unable to simultaneously satisfy constraints
, не забудьте строкуwebView.translatesAutoresizingMaskIntoConstraints = false
. Если вы оставите для него значение true, оно автоматически создаст для вас целый набор ограничений,webView
которые будут конфликтовать с ограничениями, которые вы добавляете программно. Apple Docs .Если вы перешли с более старой цели на iOS 11.0 и по-прежнему получаете эту ошибку, воспользуйтесь приведенным ниже решением.
источник
Я столкнулся с той же проблемой, но она может быть решена, если мы добавим WKWebView программно.
Сделайте любой дизайн, который вы хотите сделать в раскадровке, но оставьте место для WKWebView , в этой области перетащите представление и назовите его как webViewContainer и объявите эти два свойства,
Теперь создайте и добавьте webView следующим образом:
Функция createWebView объявлена как,
Теперь добавьте этот вновь созданный веб-вид в свой контейнер-вид, например так:
Наконец, просто загрузите ваш URL,
Спасибо, что прочитали это.
источник
WebKit был представлен в iOS 8, но был выпущен с ошибкой, которая вызвала сбой во время выполнения. Если вы используете Xcode 9/10 , конфигурация вашего проекта поддерживает меньше, чем iOS 11, и если вы пытаетесь добавить WKWebView с помощью построителя интерфейса. Xcode сразу показывает ошибку во время компиляции.
WKWebView до iOS 11.0 (поддержка NSCoding была прервана в предыдущей версии)
Хотя WKWebView был представлен в iOS 8 , в [WKWebView initWithCoder:] была ошибка, исправленная только в iOS 11 .
Решение - вы должны добавить WKWebView через код (только если вы поддерживаете ниже iOS 11). Это на самом деле звучит странно.
Другое решение - изменить сборки документов Interface Builder для этой опции на iOS 11 и более поздние версии (если вы переходите с более старой цели на iOS 11 и по-прежнему получаете ту же ошибку).
источник
// Для Свифта
// Для цели C
источник
Это должен быть комментарий к ответу Кампая, но у меня недостаточно репутации, чтобы комментировать.
Помимо явных версий iOS, раскрывающийся список «Сборки для» в «Инспекторе файлов» также содержит параметр « Цель развертывания (..)» . Я предпочитаю управлять версиями в одном месте, если это возможно, и все равно хотел изменить цель сборки. Я был полностью сбит с толку, он по-прежнему говорил Deployment Target (9.3), хотя я изменил соответствующую запись в общих настройках на 11.0 .
Перезапуск XCode (11.3.1) был необходим, чтобы все работало должным образом, была доступна опция 'Deployment Target (11.0)' (и 9.3 пропала). После выбора все заработало как и ожидалось.
источник
источник
UIWebView устарел в iOS11, а WKWebView работает только в iOS11 - это похоже на ошибку в Xcode GM.
источник