Swift UIWebView 初始缩放比例

Posted

技术标签:

【中文标题】Swift UIWebView 初始缩放比例【英文标题】:Swift UIWebView initial zoom scale 【发布时间】:2015-08-07 21:00:45 【问题描述】:

嘿,几天前我问了类似的问题,但没有任何帮助我,不,我认为我更接近问题。我的 rootViewController 上有一个 WebView,并为本地 PDF 的缩放比例和位置保存了一些值,现在我想在 Webview 出现时将其设置为此值,所以我尝试了以下操作。

   override func viewDidAppear(animated: Bool) 

    doLayoutThings()



    func doLayoutThings()

    if(defaults.objectForKey("positionY") != nil)


        WebView.scrollView.setZoomScale(defaults.objectForKey("zoomlevel") as! CGFloat, animated: false)
        let offest = CGPoint(x: defaults.objectForKey("positionX") as! CGFloat, y: defaults.objectForKey("positionY") as! CGFloat)
        WebView.scrollView.setContentOffset(offest, animated:false)
        println(defaults.objectForKey("zoomlevel") as! CGFloat)




    

我知道有正确的值保存到 UserDefaults 但如果我没有进行任何滚动或缩放,Webview 会显示。我对任何解决方案都非常满意。

【问题讨论】:

【参考方案1】:

我用这个链接解决了这个问题

在 Swift 中

最初我尝试更改 Web 视图缩放比例,但效果不佳。

webview.scrollView.setZoomScale(1.5, animated: true)

所以我尝试在 webViewDidFinishLoad 中更改它

func webViewDidFinishLoad(_ webView: UIWebView) 
    webview.scalesPageToFit = true

    let str = "var meta = document.createElement('meta');"
    let str1 = "meta.setAttribute( 'name', 'viewport' ); "
    let str2 = "meta.setAttribute( 'content', 'width = device-width, initial-scale = 1.0, user-scalable = yes' ); "
    let str3 = "document.getElementsByTagName('head')[0].appendChild(meta)"

    webview.stringByEvaluatingjavascript(from: "\(str)\(str1)\(str2)\(str3)")


如果需要更改缩放级别,请更改“initial-scale”以查看初始级别缩放的效果。 这对我真的很有帮助。 谢谢“UIWebView set initial zoom scale programmatically when loading an external website?”

【讨论】:

【参考方案2】:

viewDidAppear 中设置缩放比例很好,但您不能在网络视图加载其内容之前设置contentOffset。所以你必须在UIWebView上设置一个委托,然后在委托方法中设置contentOffset:

override func viewDidLoad() 
   webView.delegate = self


func webViewDidFinishLoad(webView: UIWebView) 
    let offset = CGPoint(x: defaults.objectForKey("positionX") as! CGFloat, y: defaults.objectForKey("positionY") as! CGFloat)
    webView.scrollView.setContentOffset(offset, animated: false)

【讨论】:

这里“默认值”的值是什么我收到此错误“使用未解析的标识符'默认值'” @HariNarayanan OP 将滚动位置存储在 UserDefaults 中以保存它们。然后当下次加载 web 视图时,它会获取 contentOffset 的存储值并将它们应用于 web 视图 我得到了另一个答案,我解决了谢谢你..来自***.com/questions/8028051/…

以上是关于Swift UIWebView 初始缩放比例的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIWebView+AFNetworking 时链接如下

如何使用 Swift 缩放 HTML 内容以使其适合手机宽度?

Swift:检查 UIWebView 是放大还是缩小

Swift:(预)从 initialViewController 加载 UIWebView

UIWebView 和 URLRequest 拦截

gojs 对流程图缩放设置