UIWebview删除填充/边距

use*_*331 8 objective-c uiwebview ios swift

我正在将PDF加载到a中UIWebview,我更改了背景颜色以清除并将opaque设置为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]
Run Code Online (Sandbox Code Playgroud)

我将此应用于webViewDidFinishLoad方法

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

但仍有填充或边距,它看起来像这样:

在此输入图像描述

我该如何解决?

我需要修复这个问题的原因是因为我要将这个UIWebView保存为PDF,当我保存它时,还有额外的间距,这里是我的PDF生成代码:

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

        let data = NSMutableData()


        UIGraphicsBeginPDFContextToData(data, CGRectZero, nil)


        UIGraphicsBeginPDFPage()


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


        UIGraphicsEndPDFContext()


        return data
    }
Run Code Online (Sandbox Code Playgroud)

和更多

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()
Run Code Online (Sandbox Code Playgroud)

dan*_*anh 5

将滚动视图框架设置为Web视图框架将不会在Web视图处于原点时起作用,否则会产生不希望的效果。

调整滚动视图contentInset

// set t,l,b,r to be negative CGFloat values that suit your content
webView.scrollView.contentInset = UIEdgeInsetsMake(t,l,b,r);
Run Code Online (Sandbox Code Playgroud)


use*_*331 4

这似乎解决了我的问题,不确定它与其他 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)
Run Code Online (Sandbox Code Playgroud)

然后保存 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)
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果我做错了什么,请告诉我