2016-08-06 4 views
6

UIWebviewにPDFを読み込み、背景色を変更して不透明をfalseに設定しました。しかし、今ではに余分なスペースや余白がありますので、私は削除したいので、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

どうすれば修正できますか?

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

     let data = NSMutableData() 


     UIGraphicsBeginPDFContextToData(data, CGRectZero, nil) 


     UIGraphicsBeginPDFPage() 


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


     UIGraphicsEndPDFContext() 


     return data 
    } 
:私はそれを保存するとき、私はここに、余分なスペースもあることを、PDFとしてのUIWebViewを節約することになるだろうとしていますので、私は、これは固定必要がある理由がある

は私のPDFは、コードを生成でWeb表示は、そうでない場合は、原点と不要な効果でありながら

、よりウェブビューフレームにスクロールビューの枠を設定する

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

を。

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

は効果がありません。

スクロールビューcontentInset調整:鉱山景観であり、それは正常に動作します。これは、それが他のPDF文書(ポートレート)で動作する方法もわからない、私の問題を修正するように見える

// 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のためのスペースを、また、いないことを確認してください-10px側の制約なしであなたのWebViewにスーパーを追加し、

clipsToBounds = true 
clipSubViews = true 

enter image description here

0

Tスーパーをマークすることを忘れ彼の例では、ナビゲーションバーを可能にするために64の最上部の間隔が与えられています。

let webView: UIWebView = UIWebView() 

webView.frame = self.view.bounds 

webView.scrollView.frame = webView.frame 

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

ネガティブコンテンツのインセットを適用するのに効果的でした。これは、スウィフト4に、iOSの11及び10上で動作します:

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

関連する問題