WKWebView не отображается в пользовательском UIView - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть пользовательский UIView с его XIB. Xib пуст, кроме представления содержимого.

В соответствующем классе я загружаю xib, затем пытаюсь создать WKWebView следующим образом:

@IBOutlet var contentView: UIView!

...

Bundle.main.loadNibNamed("CustomView", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds

let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: self.frame, configuration: webConfiguration)
webView.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(webView)

webView.backgroundColor = UIColor.orange    // Just to check visually 

А в моем UIViewController:

let v = CustomView.init(frame: frame)
self.view.addSubview(v)

Когда я запускаю свой проект, когда появляется контроллер представления, я вижу веб-представление с оранжевым фоном, но оно сразу исчезает, что не так в моем коде?

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Удалить эту строку:

webView.translatesAutoresizingMaskIntoConstraints = false

Эта строка означает: «Используйте мои ограничения». У вас нет никаких ограничений, поэтому, когда происходит макет, веб-представление заканчивается без размера или позиции.

0 голосов
/ 06 сентября 2018

Я нашел решение по моей проблеме.

Изначально я использовал contentView.addSubview(webView). contentView находится на первом уровне моего xib, создается автоматически при создании нового xib.

Чтобы решить мою проблему, я создал UIView как подпредставление contentView непосредственно в Интерфейсном Разработчике. Затем в коде y я добавил веб-представление как подпредставление этого нового представления, а не из contentView. И теперь все в порядке.

Итак, вкратце

  • Ситуация прежде: xib's contentView -> webView
  • Ситуация сейчас: xib's contentView -> UIView -> webView
0 голосов
/ 05 сентября 2018

Примечание. webView.backgroundColor не работает должным образом. Попробуйте использовать load функцию url или вызовите loadHTMLString для проверки.

Просто чтобы убедиться, что это не проблема макета, используйте «Debug View Hierarchy» (щелкните двойной прямоугольник в XCode, когда Debug запускает приложение), чтобы проверить границы / фрейм ваших подпредставлений. Если вы видите проблемы там, то вам нужно добавить правильные ограничения макета.

Если это так, вы также можете использовать приведенную ниже служебную функцию для всех своих вызовов addSubview, указанных выше. Он добавляет подпредставление внутри другого представления, растягивая в нем подпредставление от края до края (полная ширина и высота).

public static func add(_ subView: UIView, in containerView: UIView) {
    containerView.addSubview(subView)
    subView.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
        subView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
        subView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
        subView.topAnchor.constraint(equalTo: containerView.topAnchor),
        subView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
        ]
    )
}
...