Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to remove ["Page 1 of 20" view] in a UIwebview when displaying pdf?

Tags:

ios

pdf

uiwebview

I can not get to a solution after much googling. I have a UIWebView with a PDF in it.

I do not want the view: "Page 1 of 20" The small view in the upper left corner when viewing a PDF file. It is possible to remove this?

like image 345
olivier Avatar asked Jan 19 '14 16:01

olivier


2 Answers

Swift 3 and WKWebView

I get all the subviews of the WKWebView and then remove WKPDFPageNumberIndicator:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
  let webViewSubviews = self.getSubviewsOfView(v: self.webView)
  for v in webViewSubviews {
    if v.description.range(of:"WKPDFPageNumberIndicator") != nil {
      v.isHidden = true // hide page indicator in upper left
    }
  }
}

func getSubviewsOfView(v:UIView) -> [UIView] {
  var viewArray = [UIView]()
  for subview in v.subviews {
    viewArray += getSubviewsOfView(v: subview)
    viewArray.append(subview)
  }
  return viewArray
}

You'll probably have to set webView.navigationDelegate = self

UPDATE (not tested) - Swift 4

Keep the getSubviewsOfView function from above and modify the webView function like this:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
  let webViewSubviews = self.getSubviewsOfView(v: self.webView)
  for v in webViewSubviews {
    if v.isKind(of: UILabel.self) || v.isKind(of: UIImageView.self) || v.isKind(of: UIVisualEffectView.self) {
      v.isHidden = true
    }
  }
}
like image 112
budiDino Avatar answered Oct 17 '22 12:10

budiDino


This code is working on iOS9, 10 (tested)

    func hidePageNumberView(v: UIView) {
        for subView in v.subviews {
            if subView.isKindOfClass(UIImageView) || subView.isKindOfClass(UILabel) || subView.isKindOfClass(UIVisualEffectView){
                subView.hidden = true

                if subView.isKindOfClass(UILabel) {
                    if let sv = subView.superview {
                        sv.hidden = true
                    }
                }
            } else {
                hidePageNumberView(subView)
            }
        }
    }

Implement webView.scrollView.delegate and run above code in scrollViewDidScroll

Hope this help.

iOS 11 / Swift 4:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    hidePageNumberView(scrollView)
}

func hidePageNumberView(_ v: UIView) {
    for subView in v.subviews {
        if subView is UIImageView || subView is UILabel || subView is UIVisualEffectView {
            subView.isHidden = true

            if subView is UILabel {
                if let sv = subView.superview {
                    sv.isHidden = true
                }
            }
        } else {
            hidePageNumberView(subView)
        }
    }
}
like image 23
lee5783 Avatar answered Oct 17 '22 14:10

lee5783