#ios #swift #xcode #uiview #wkwebview
#iOS #swift #xcode #uiview #wkwebview
Вопрос:
Я пытаюсь программно добавить a WKWebView
к моему webViewContainer
(type = UIVIew
) как a subView
. Приведенный ниже код отлично работает, когда я тестирую его на iPhone 11 iOS 13.3, но не на iPhone 6 iOS 11.0.1. Проблема в том, что webViewContainer
имеет leading
(значение = 10) и trailing
(значение = 10) пробелы с self.view
. Когда я запускаю его на iPhone 6, leading
соблюдается только значение, а не значение trailing
also. Когда я отлаживаю, webViewContainer
и мой добавленный webView
получает тот же кадр, что и он webViewContainer
.
В чем может быть проблема?
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.frame.size = self.webViewContainer.frame.size
webView.uiDelegate = self
webView.navigationDelegate = self
self.webViewContainer.addSubview(webView)
Комментарии:
1. не могли бы вы поделиться своими кодами ограничений, если не возражаете?
2. @sekoyaz Я создаю ограничения из файла xib
3. перед добавлением в качестве подраздела put и WebView.translatesAutoresizingMaskIntoConstraints = false, можете ли вы проверить?
4. @sekoyaz хорошо, я проверю это сейчас
5. @sekoyaz нет проблем. Спасибо
![]()
Ответ №1:
Свойство рамки любого вида представления состоит из четырех свойств: x, y, width и height. В вашем коде единственное, что вы делаете, это устанавливаете свойства width и height с помощью следующего кода;
webView.frame.size = self.webViewContainer.frame.size
Я полагаю, что ваш webViewContainer имеет значения x: 0 и y: 0, и поскольку вы инициализировали свой WebView с помощью .zero frame, значения одинаковы. Однако это может быть не всегда.Это вызовет проблемы при запросе изменения фрейма webViewContainer.
Если я не ошибаюсь, вы бы хотели, чтобы ваш WebView находился точно в том же месте, что и ваш webViewContainer. Для достижения этого необходимо объяснить разницу между свойствами фрейма и границ.
Рамка — это относительное положение представления по отношению к его родительскому представлению. Однако свойство bounds относится к его координатам относительно его собственного пространства.
С учетом этих различий, для достижения того, что вы хотите сделать, относительно безопаснее просто заменить эту строку;
webView.frame.size = self.webViewContainer.frame.size
со следующим;
webView.frame = webViewContainer.bounds
webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
свойство маски автоматического изменения размера изменит фрейм вашего веб-просмотра при изменении границ супервизора (в данном случае webViewContainer).