【问题标题】:Is it possible to remove ["Page 1 of 20" view] in a UIwebview when displaying pdf?显示pdf时是否可以在UIwebview中删除[“第1页,共20页”视图]?
【发布时间】:2014-02-08 18:29:34
【问题描述】:

经过多次谷歌搜索后,我无法找到解决方案。 我有一个带有 PDF 的 UIWebView。

我不想要视图:“第 1 页,共 20 页”查看 PDF 文件时左上角的小视图。 可以去掉吗?

【问题讨论】:

  • 页码提示看起来不像 JS 的东西。你可以看看类似的问题。 stackoverflow.com/a/4167060/729175你可以尝试遍历隐藏的.subviews,找到你想要的。
  • 虽然这可以通过遍历子视图来实现,但这不是一个非常优雅的解决方案。在我看来,最好使用专用的 iOS PDF 阅读器组件,例如 PSPDFKit(商业)、vfrreader 或 FastPDFKit 等等

标签: ios pdf uiwebview


【解决方案1】:

Swift 3 和WKWebView

我得到WKWebView的所有子视图然后删除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
}

您可能需要设置webView.navigationDelegate = self

更新(未测试)- Swift 4

保留上面的 getSubviewsOfView 函数并像这样修改 webView 函数:

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
    }
  }
}

【讨论】:

  • @MassimoPolimeni 已经很长时间了,所以 WKPDFPageNumberIndicator 可能已在较新版本的 swift 中重命名。我没有可以快速运行的项目来测试它并帮助您:/ 尝试浏览所有子视图并隐藏所有 UIImageView、UILabel 和 UIVisualEffectView,正如其他一些答案所建议的那样。
  • @MassimoPolimeni 查看我上面所做的修改,如果这对你有用,请告诉我。
  • 我做了一点修改以匹配 Swift 4.2 语法,所以放置了 v.isKind(of: UILabel.self) 但它仍然不起作用,不知道我为什么要调试它,主要想法似乎是合法的
  • 我记得我基本上打印了所有子视图的v.description,然后我检测到包含WKPDFPageNumberIndicator的东西。祝你好运;)
  • 不工作:/。找不到WKPDFPageNumberIndicator 类。 iOS 13.3 使用WKWebview
【解决方案2】:

此代码适用于 iOS9、10(已测试)

    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)
            }
        }
    }

实现webView.scrollView.delegate并在scrollViewDidScroll中运行上述代码

希望对您有所帮助。

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)
        }
    }
}

【讨论】:

    【解决方案3】:

    一段时间后,我和我的伙伴一起找到了使用 swift 5 和 WKWebView 的解决方案:

    let pdfWebView: WKWebView = {
         let webView = WKWebView()
         webView.backgroundColor = .clear
         webView.isOpaque = false
         webView.contentMode = .scaleToFill
         return webView
    }()
    
    pdfWebView.delegate = self
    pdfWebView.navigationDelegate = self
    
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
         guard let last = webView.subviews.last else {
              return
         }
    
         last.isHidden = true
    }
    

    【讨论】:

      【解决方案4】:

      我找到了解决您问题的方法... 您可以使用以下代码隐藏“第 1 页,共 20 页”:

      for (UIView* subView in [webView subviews])
      {
          if ([subView isKindOfClass:[UIScrollView class]]) {
              for (UIView* shadowView in [subView subviews])
              {
                  if ([shadowView isKindOfClass:[UIImageView class]]) {
                      [shadowView setHidden:YES];
                  }
              }
          }
      }
      

      希望这可能对某些人有所帮助... 谢谢...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-22
        • 1970-01-01
        相关资源
        最近更新 更多