2016-04-02 19 views
1

yüksekliğini almak I (onların NSLayoutConstraint s ile) aşağıdaki hiyerarşiyi olan bir UIViewController var:UIScrollView contentView

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 
} 

konu CGRectGetHeight(self.contentView.frame) istenilen yüksekliğe alır olmamasıdır. Herhangi bir fikir?

Bu nedenle, HTML UIWebView'a yüklendikten sonra, görünümün kısıtlamaları ile yüksekliği almak istiyorum.

cevap

0

Bir web görüntüsünü içeriğine sığdırmak için yeniden boyutlandırmaya çalışırken zor olan sorun, web görünümünün kendisinin içinde görüntülenen DOM içeriğinin ne kadar uzun olabileceği konusunda hiçbir fikri olmadığı gerçeğidir. Yapmanız gereken, DOM'dan içeriğin JavaScript aracılığıyla ne kadar uzun olduğunu sormaktır.

[webView stringByEvaluatingJavaScriptFromString: @"document.height"] 

veya Swift:

webView.stringByEvaluatingJavaScriptFromString("document.height") 

Ve UIWebView için bir boyut seçmek, ortaya çıkan değeri kullandığımız kodunda biz böyle bir şey yapmak.

+0

Teşekkürler ama elde etmek istediğim şey, UIView-ContentView (UIScrollview ve UIScrollVIew'in ebeveyne eşit yükseklikte sıfır kenar boşlukları; kodda self.contentView olarak belirtilir) 'nin yüksekliğidir. UIScrollView'un ContentSize yüksekliğini güncellerdim. –