获取 UIScrollView contentView 的高度

get height of UIScrollView contentView

我有一个 UIViewController,它具有以下层次结构(及其 NSLayoutConstraint):

UIView
-UIScrollView
--UIView-ContentView (zero margins to the UIScrollview and equal height to UIScrollVIew's parent; mentioned in the code as self.contentView)
---UIView (fixed height, 0 top margin to Content View)
---UIView (fixed height, 0 top margin to above view)
---UIView (fixed height, 0 top margin to above view)
---UIView (fixed height, 0 top margin to above view)
---UIWebView (fixed height & linked to IBOutlet in the class; gets expanded)
---UILabel (top margin to UIWebView)
---UIView (fixed height, top margin to above label)
---UIView (fixed height, 0 top margin to above view)
---UIView (fixed height, 0 top margin to above view)
---UIView (fixed height, 0 top margin to above view)
---UIButton (fixed height, top margin to above view)

Scenario:
1. On viewDidLoad() I'm adding the HTML text by appending the JavaScript code that returns the height of the UIWebView
2. on UIWebViewDelegate method (shouldStartLoadWithRequest) I'm setting the following things:
- webViewHeight.constant (NSLayoutConstraint, linked from IB)
- self.scrollView.contentSize = CGSizeMake(self.view.frame.width, CGRectGetHeight(self.contentView.frame))


override func viewDidLoad() {
    self.webView.scrollView.scrollEnabled = false

    let heightHackScript = "<script type='text/javascript'>window.onload = function() { window.location.href = 'ready://' + document.body.offsetHeight; }</script>"

        if let cBody:NSData = self.model?.text_content {

          self.webView.loadHTMLString(heightHackScript + String(data: cBody, encoding: NSUTF8StringEncoding)!, baseURL: nil)
        }
  }


func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {

  let url = request.URL

  if navigationType == .Other {
    if url?.scheme == "ready" {
      webViewHeight.constant = (url?.host?.floatValue)!
      self.scrollView.contentSize = CGSizeMake(self.view.frame.width, CGRectGetHeight(self.contentView.frame))
      return false
    }
  }
  return true
}

问题是 CGRectGetHeight(self.contentView.frame) 没有达到所需的高度。有什么想法吗?

所以我想在 HTML 加载到 UIWebView 后获得视图约束的高度。

尝试调整 Web 视图的大小以适应其内容时遇到的难题是 Web 视图本身并不知道 DOM 在其中显示的内容可能有多高.您需要做的是通过 JavaScript 询问 DOM 它的内容有多高。在我们的代码中,我们这样做是这样的:

[webView stringByEvaluatingJavaScriptFromString: @"document.height"]

或 Swift:

webView.stringByEvaluatingJavaScriptFromString("document.height")

并使用结果值 select 我们的 UIWebView 的大小。