2016-08-06 30 views
6

Załaduję plik PDF do UIWebview, a ja zmieniłem kolor tła, aby wyczyścić i ustawić nieprzezroczysty na false. Jednak teraz w moim UIWebView istnieje dopełnienie lub margines, który chciałbym usunąć, aby ekran był UIWebview.UIWebview usuń wypełnienie/margines

stworzyłem UIWebview tak:

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] 

i Zgłosiłem to do sposobu webViewDidFinishLoad

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

ale nadal istnieje wyściółka lub margines, to wygląda to tak:

enter image description here

Jak to naprawić?

powód, dlaczego muszę to naprawić to, ponieważ mam zamiar ratować ten UIWebView w formacie PDF, a kiedy go zapisać, że dodatkowy odstęp jest tam również, tutaj jest moja PDF generować kod:

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

     let data = NSMutableData() 


     UIGraphicsBeginPDFContextToData(data, CGRectZero, nil) 


     UIGraphicsBeginPDFPage() 


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


     UIGraphicsEndPDFContext() 


     return data 
    } 

i więcej

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

to możliwe, że sama treść PDF jest sformatowany z wstawka? W każdym razie nie zadzieraj z ramką przewijania. Nie robi to nic, ponieważ widok sieciowy prawdopodobnie pochodzi od jego rodzica, a w przeciwnym razie byłby szkodliwy. Domyślam się również, że TAK jest już domyślną wartością dla scalesPageToFit. Najlepszym konstruktywnym pomysłem jaki mogę zaoferować jest webView.scrollView.contentInset. – danh

+0

Czy możesz umieścić to na odpowiedź, proszę – user979331

Odpowiedz

2

wydaje się rozwiązać mój problem, nie wiem, jak dobrze to działa z innymi dokumentami PDF (portret) kopalnia Krajobraz i to działa dobrze.

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) 

a następnie do zapisywania 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) 
     } 
    } 

Proszę dać mi znać, jeśli robię coś złego

+0

Jest to również jedyne rozwiązanie, które założyłem. To działa – Aximem

4

Ustawianie przewijania widoku ramkę do wyświetlania w Internecie ramy będą miały żadnego wpływu, natomiast widok internetowa jest na pochodzeniu i niepożądany efekt w inny sposób.

Dostosuj widok przewijania contentInset:

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

Przykład Proszę? – user979331

+0

To nie działało, próbowałem następujące: webView.scrollView.contentInset = UIEdgeInsetsMake (10, -15, -10, -150); – user979331

+0

"Nie działa" zawiera bardzo mało informacji do kontynuowania. – danh

1

Nie jestem pewien, czy znalezieniu odpowiedzi, ale jako szybki obejść możesz podać wstępnie ustawione ograniczenie.

powiedzmy jeśli twoja przestrzeń wyściółka jest 10px ze wszystkich 4 stron i jeśli jego zawsze stała

praca wokół jest:

Give -10 przestrzeń dla Webview wokół niego, również nie zapomnij dodać Superview do Webview bez -10px ograniczeń bocznych i zaznaczyć Superview

clipsToBounds = true 
clipSubViews = true 

enter image description here

0

T jego przykład daje górny odstęp 64, aby umożliwić pasek nawigacji.

let webView: UIWebView = UIWebView() 

webView.frame = self.view.bounds 

webView.scrollView.frame = webView.frame 

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

Udało mi się zastosować negatywne wstawki treści.To działa na iOS 11 i 10, na Swift 4:

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