如何正确计算UIScrollView的最小缩放系数?

问题描述 投票:2回答:2

我有一个包含单个UIScrollViewUIImageView。我正在尝试设置最小滚动工厂,以便在视图完全缩小时,可以看到整个画面并在整个屏幕上延伸。

目前我的代码似乎设置的最低值太低。可以看到整个画面,但画面右侧有很多额外的空间。当视图出现图像可以完全移出视图时,会有太多额外空间。一旦执行了另一次缩放,许多额外空间就会消失,但图像仍然可以缩小得太小。

这是代码:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    imageView.image = image!
    imageView.frame.size = image!.size
    scrollView.contentSize = imageView.frame.size

    let scrollViewFrame = scrollView.frame
    let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width
    let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height
    let minScale = min(scaleWidth, scaleHeight)
    scrollView.minimumZoomScale = minScale
    scrollView.maximumZoomScale = 3.0
    scrollView.zoomToRect(imageView.frame, animated: false)
}

编辑:缩放前后的尺寸似乎在变化。

放大之前:

Scroll view frame: (0.0, 0.0, 600.0, 600.0)
Scroll view content size: (1500.0, 1001.0)
Image view frame: (0.0, 0.0, 1500.0, 1001.0)

缩放后:

Scroll view frame: (0.0, 0.0, 600.0, 600.0)
Scroll view content size: (600.0, 400.4)
Image view frame: (0.0, 0.0, 600.0, 400.4)
ios swift
2个回答
1
投票

这个问题在viewWillAppear中没有计算出autolayout约束。为了解决这个问题,我把逻辑移到了viewDidLayoutSubviews


0
投票

要计算最小缩放系数,确保边缘周围没有额外的空间,您应该使用max而不是min

let scaleWidth = scrollView.frame.width / scrollView.contentSize.width
let scaleHeight = scrollView.frame.height / scrollView.contentSize.height
let minScale = max(scaleWidth, scaleHeight)
scrollView.minimumZoomScale = minScale
© www.soinside.com 2019 - 2024. All rights reserved.