iPhone 在一个 UIWebView 中显示多个 PPT

Showing Multiple PPTs in one UIWebView on iPhone

在我当前的应用程序中,我有一个 UITableView 显示应用程序中存储的数百个 PPT 文件。单击其中一个时,一个带有 UIWebView 的新视图会将 PPT 文件加载到 webView 中。我想知道的是,我是否可以对 select 多个 PPT 文件使用 accessoryView,然后将所有这些 PPT 文件加载到一个 UIWebView 中,允许它们从第一个 selected 开始滚动进入第二个,依此类推。

使用多个 UIWebViews

每个 PPT 的宽度或纵横比可能不同。把所有的PPT合并成一个PPT看起来是个好主意,但可能不切实际。

合并多个网页也是如此:您可能 运行 进入相互冲突的全局变量,例如背景颜色或更糟的编码。

通过选择采用程序化的连续性印象,您将避免所有这些问题以及更多问题,并且还能够以连续的方式显示不同类型的文档:PDF、PPT、WEB。


垂直选项

  1. 不要向您的容器视图添加 UIWebview,而是添加 UIScrollView。反过来,将您的 webview 放置在滚动条内,并使用链式垂直约束。
  2. 单独加载每个 UIWebView 内容:

    aWebView.delegate = self
    if let url = NSBundle.mainBundle().URLForResource("Still", withExtension: "ppt") {
        awebView.loadRequest(NSURLRequest(URL: url))
    }
    
  3. 修改每个 webview 的固有大小,使其占用整个 space 可用空间。如果你在委托中这样做,你基本上让 OS 为你做所有的计算,并在事后收集值:

    func webViewDidFinishLoad(webView: UIWebView) {
        if let flow = webView as? FlowWebView {
            flow.w.constant = self.view.bounds.width
            flow.h.constant = webView.scrollView.contentSize.height
        }
    }
    

为简单起见,我创建了一个简单的包装器,以便我可以轻松访问内部约束,但您也可以轻松地即时重建约束:

class FlowWebView: UIWebView {
    @IBOutlet var h: NSLayoutConstraint!
    @IBOutlet var w: NSLayoutConstraint!
}

上面的代码我在iOS9、Xcode7、Swift中试过了。您唯一需要的补充是:

  • 方向改变
  • 缩放页面以适合

水平选项

水平选项类似(对每个内容使用单独的 UIWebView),仅在 UIScrollView 中水平放置,并且可以增加页面视图控制器的清晰度。

它需要一个固定的高度(更少的计算)和一个可预测的宽度(n x views)。垂直滑动浏览每个 PPT,水平滑动从一个到下一个。