2016-08-06 3 views
6

Я загружаю PDF в UIWebview, и я изменил цвет фона, чтобы очистить и установить непрозрачность в false. Однако теперь в моем UIWebView есть отступы или поля, которые я хотел бы удалить, поэтому экран UIWebview - это экран.UIWebview remove padding/margin

Я создал 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 сам отформатирован с вставкой? Во всяком случае, не путайте с рамкой просмотра прокрутки. Это ничего не делает, потому что веб-представление, вероятно, происходит от его родителя, и это было бы вредно в противном случае. Я также предполагаю, что 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

Настройка прокрутки просмотра кадра на кадр просмотра веб не будет иметь никакого эффекта в то время как веб-взгляд на происхождение и нежелательный эффект в противном случае.

Настройте вид прокрутки 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

Я не уверен, если вы нашли ответ, но как быструю работу вокруг вы можете дать предварительно скорректированное ограничение.

позволяет сказать, что если у вас обивка пространство 10px из всех 4-х сторон, и если его всегда постоянная

работы вокруг:

Дает -10 пространства для WebView вокруг него, а также сделать не забудьте добавить SuperView к вашей Webview без ограничений со стороны -10px и отметьте SuperView

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

Это работало для меня, чтобы применить отрицательные вставки содержания.Это работает на прошивкой 11 и 10, на Swift 4:

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

Смежные вопросы