У меня есть ячейка таблицы с таким макетом -
ContentView
- StackView
- Fixed Height UILabel
- UIView (Webview Container)
- Fixed Height UILabel
- ... more views
Теперь я пытаюсь добавить веб-просмотр внутри этого UIView следующим образом -
func prepareQuestionWebView() {
let webConfiguration = WKWebViewConfiguration()
let contentController = WKUserContentController();
webConfiguration.userContentController = contentController
webView = WKWebView(frame: CGRect(origin: CGPoint.zero, size: questionView.frame.size))
webView?.scrollView.isScrollEnabled = false
webView?.scrollView.bounces = false
webView?.scrollView.bouncesZoom = false
webView?.autoresizingMask = [.flexibleWidth, .flexibleHeight]
webView?.translatesAutoresizingMaskIntoConstraints = false
webView?.tag = -1
webView?.navigationDelegate = self
questionView.removeAllSubviews()
questionView.addSubview(webView!)
webView?.contentScaleFactor = 1
}
Я создалследующие выходы для моего стека и контейнера веб-просмотра -
@IBOutlet weak var questionView: UIView!
@IBOutlet weak var rootStack: UIStackView!
и для того, чтобы сделать размер кадра questionView равным размеру содержимого веб-просмотра. Я делаю это -
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if webView.isLoading == false {
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
webView.evaluateJavaScript("document.body.scrollHeight", completionHandler: { (result, error) in
if let height = result as? CGFloat {
self.setHeightData(height, webView)
}
})
}
}
}
func setHeightData(_ height: CGFloat, _ wv: WKWebView) {
switch wv.tag {
case -1:
questionView.frame = CGRect.init(x: 0, y: 36, width: rootStack.frame.width, height: height)
default:
break
}
wv.layoutSubviews()
questionView.layoutIfNeeded()
rootStack.layoutSubviews()
rootStack.layoutIfNeeded()
}
Это обновляетРазмер веб-просмотра и размер его контейнера, но по какой-то причине элементы после контейнера веб-просмотра в просмотре стека не обновляются, и, следовательно, они перекрываются с контейнером веб-просмотра
Итак, как я могу обновить представление просмотра стека после установки вопросникавысота равна содержанию его веб-просмотра?
Или есть другой способ сделать динамическую высоту questionView (контейнера webview) в соответствии с его содержимым и заставить остальные представления перемещаться вниз при изменении его высоты?