2016-08-06 162 views
6

我正在加載PDF到UIWebview,我改變了背景顏色清除並設置爲不透明爲false。但是現在我的UIWebView中有一個填充或餘量,我想刪除,因此UIWebview就是屏幕。UIWebview刪除填充/餘量

我創建了一個UIWebview像這樣:

let webview = UIWebView() 
webview.frame = self.view.bounds 
webview.scrollView.frame = webview.frame 
webview.userInteractionEnabled = true 
webview.scalesPageToFit = true 
webview.becomeFirstResponder() 
webview.delegate = self 
webview.scrollView.delegate = self 
webview.opaque = false 
webview.backgroundColor = UIColor.clearColor() 
self.view.addSubview(webview) 
webview.loadRequest(NSURLRequest(URL:url)) 
webview.gestureRecognizers = [pinchRecognizer, panRecognizer] 

和我申請這給webViewDidFinishLoad方法

func webViewDidFinishLoad(webView: UIWebView) { 
     let padding = "document.body.style.margin='0';document.body.style.padding = '0'" 
     webView.stringByEvaluatingJavaScriptFromString(padding) 
} 

但仍有填充或利潤率,它看起來像這樣:

enter image description here

我該如何解決這個問題?

爲什麼我需要這個固定的原因是因爲我將要保存這一個UIWebView爲PDF,當我保存它,額外的空間是存在的還有,這裏是我的PDF生成代碼:

func drawPDFUsingPrintPageRenderer(printPageRenderer: UIPrintPageRenderer) -> NSData! { 

     let data = NSMutableData() 


     UIGraphicsBeginPDFContextToData(data, CGRectZero, nil) 


     UIGraphicsBeginPDFPage() 


     printPageRenderer.drawPageAtIndex(0, inRect: UIGraphicsGetPDFContextBounds()) 


     UIGraphicsEndPDFContext() 


     return data 
    } 

let screenHeight = appDelegate.webview!.scrollView.bounds.size.height 

     let heightStr = appDelegate.webview!.scrollView.bounds.size.height 

     let height = heightStr 

     let pages = ceil(height/screenHeight) 

     let pdfMutableData = NSMutableData() 

     UIGraphicsBeginPDFContextToData(pdfMutableData, appDelegate.webview!.scrollView.bounds, nil) 

     for i in 0..<Int(pages) 
     { 

      if (CGFloat((i+1)) * screenHeight > CGFloat(height)) { 
       var f = appDelegate.webview!.scrollView.frame 
       f.size.height -= ((CGFloat((i+1)) * screenHeight) - CGFloat(height)); 
       appDelegate.webview!.scrollView.frame = f 
      } 

      UIGraphicsBeginPDFPage() 

      let currentContext = UIGraphicsGetCurrentContext() 

      appDelegate.webview!.scrollView.setContentOffset(CGPointMake(0, screenHeight * CGFloat(i)), animated: false) 

      appDelegate.webview!.scrollView.layer.renderInContext(currentContext!) 

     } 

     UIGraphicsEndPDFContext() 
+0

是有可能,PDF內容本身的格式與插圖?無論如何,不​​要混淆滾動視圖框架。這沒有任何意義,因爲Web視圖可能在其父項的原始位置,否則將會造成危害。我也猜測YES已經是scalesPageToFit的默認值。我可以提供的最佳構造理念是webView.scrollView.contentInset。 – danh

+0

請問您能回答這個問題嗎 – user979331

回答

2

這似乎解決我的問題,不知道如何與其他PDF文檔(縱向)的工作我的是景觀,它工作正常。

appDelegate.webview = UIWebView() 

     appDelegate.webview!.frame = CGRect(x: 0 - 8, y: 0 - 8, width: self.view.bounds.size.width + 14, height: self.view.bounds.size.height + 14) 

     appDelegate.webview!.scrollView.frame = CGRect(x: 0 - 8, y: 0 - 8, width: self.view.bounds.size.width + 14, height: self.view.bounds.size.height + 14) 

,然後保存PDF

func createPdfFromView(aView: UIView, saveToDocumentsWithFileName fileName: String) 
    { 

     let pdfData = NSMutableData() 

     UIGraphicsBeginPDFContextToData(pdfData, CGRect(x: 0 + 8, y: 0 - 8, width: aView.bounds.size.width - 17, height: aView.bounds.size.height - 117), nil) 

     UIGraphicsBeginPDFPage() 

     guard let pdfContext = UIGraphicsGetCurrentContext() else { return } 

     aView.layer.renderInContext(pdfContext) 
     UIGraphicsEndPDFContext() 

     if let documentDirectories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first { 
      let documentsFileName = documentDirectories + "/" + fileName 
      debugPrint(documentsFileName) 
      pdfData.writeToFile(documentsFileName, atomically: true) 
     } 
    } 

請讓我不知道我知道,如果我做錯什麼

+0

這也是我創建的唯一解決方案。有用 – Aximem

4

設置滾動視圖幀到Web視圖幀將沒有任何效果,而網站的觀點是在原點否則不想要的效果。

調整滾動視圖contentInset

// set t,l,b,r to be negative CGFloat values that suit your content 
webView.scrollView.contentInset = UIEdgeInsetsMake(t,l,b,r); 
+0

請舉例? – user979331

+0

這沒有奏效,我嘗試了以下方法:webView.scrollView.contentInset = UIEdgeInsetsMake(10,-15,-10,-150); – user979331

+0

「沒有工作」包含很少的信息。 – danh

1

如果你已經找到了答案,但作爲一個快速的解決辦法你可以給予預先調整的約束。

讓說,如果你的填充空間從所有4個方面10px的,如果它始終恆定

的解決辦法是:

給-10對周圍的webView的空間,也使不忘記一個上海華盈添加到您的web視圖沒有-10px方面的限制和紀念上海華

clipsToBounds = true 
clipSubViews = true 

enter image description here

0

ŧ他的例子給出了一個64的頂部空間,以允許導航欄。

let webView: UIWebView = UIWebView() 

webView.frame = self.view.bounds 

webView.scrollView.frame = webView.frame 

webView.scrollView.contentInset = UIEdgeInsetsMake(64,0,0,0) 
0

它適用於我應用負面內容插頁。這適用於iOS 11和10,在斯威夫特4:

webView.scrollView.contentInset = UIEdgeInsets(top: -8, left: -8, bottom: -8, right: -8)