UIScrollView setZoomscale不适用于ViewWillApper

时间:2015-08-03 12:16:26

标签: ios swift uiscrollview

嘿伙计们我在谷歌上搜索了一下,并在这里阅读了一些关于堆栈溢出的主题,但没有一个云真的帮助我,所以我希望你能帮助我。 我有一个UIWebView显示本地保存的PDF,它工作得很好,但我也想在加载PDF时设置缩放级别。我这样解决了。

 override func viewDidAppear(animated: Bool) {

    WebView.scalesPageToFit = true
    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)

        print(defaults.objectForKey("zoomlevel") as! CGFloat)
    }

但这不是很好,因为它对用户来说看起来很糟糕,所以我试图将我的代码移动到ViewWillAppear,但是它不再起作用了,并且pdf没有缩放。 感谢任何解决方案的想法:)

编辑,因为我在下面写了一条评论,我在打印后打印了Zoomscale的值。

        WebView.scrollView.setContentOffset(offest, animated:false)
        println(defaults.objectForKey("zoomlevel") as! CGFloat)
        println(WebView.scrollView.zoomScale)

如果我在ViewWillAppear或ViewDidLoad中执行此操作,则第一个值是保存的值,如1.82366,第二个值仍为1.0。如果我在ViewDidAppear中调用它,则第一个和第二个值相等,除了View的第一个外观(app start)。因此,如果它启动App,它就像上面针对ViewWillAppear所描述的那样,但如果我通过segue从另一个ViewController返回,它适用于ViewDidAppear。

2 个答案:

答案 0 :(得分:5)

我知道这个问题现在可能已经过时了,但我终于在我的快速代码中解决了它,我会把它放在这里它可能对其他人有用: 要使webview.scrollview.setzoomscale生效,zoomscale应位于maximumzoomscaleminimumzoomscale属性之间。默认情况下这两个都是1,这就是缩放对你不起作用的原因。加上这个就应该没问题了:

webView.scrollview.maximumZoomScale = CGFloat(10) // or any number higher than your zoomscale

现在应该可以了。

答案 1 :(得分:0)

在布局视图之前设置内容偏移量根本没有效果。要解决此问题,您必须调用layoutIfNeed()方法立即布置特定视图

override func viewWillAppear(animated: Bool) {

    WebView.layoutIfNeeded()
    WebView.scalesPageToFit = true
    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)

        print(defaults.objectForKey("zoomlevel") as! CGFloat)
    }
}