嵌套图像的UiScrollview看起来很奇怪

时间:2015-07-02 14:10:25

标签: uiscrollview uiimageview border dimensions

我在UIViewController中有一个UIScrollView(由ImageViewController子类化)。 ViewController本身是NavigationController堆栈的一部分。现在,除了有一个导航栏,我希望ScrollView能够占用屏幕上所有可用的空间。然后,scrollview中的UIImageView应该填充滚动视图的可用空间。您可以在此帖子的底部看到当前状态。

class ImageViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet weak var scrollView: UIScrollView!
    var imageView: UIImageView?
    var image: UIImage?

    override func viewDidLoad() {
        super.viewDidLoad()
        scrollView.delegate = self

        if let image = image {
            imageView = UIImageView(image: image)
            if let imageView = imageView {
                imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: image.size)
                scrollView.addSubview(imageView)
                scrollView.contentSize = image.size

                let scaleHeight = scrollView.frame.size.height / scrollView.contentSize.height
                let scaleWidth = scrollView.frame.size.width / scrollView.contentSize.width
                let minimumScale:CGFloat = min(scaleHeight, scaleWidth)
                let maximumScale:CGFloat = max(scaleHeight, scaleWidth)

                scrollView.minimumZoomScale = minimumScale
                scrollView.maximumZoomScale = maximumScale
                scrollView.zoomScale = maximumScale
            }
        }
    }

    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return imageView
    }
}

代码给我留下了不必要的边框(左,右,上)。我如何摆脱它们?

enter image description here

编辑:根据@ Bxtr的建议和another stackoverflow thread,我可以删除左右滚动视图的边框。经过一些挖掘后,我发现通过停用Adjust Scroll View Insets,滚动视图内的图像可以正确垂直定位。尽管如此,我还是没有找到垂直错位的原因......

4 个答案:

答案 0 :(得分:5)

您是否检查了边距/填充值,因为它看起来如此(左右边框的大小相同)。如果不是这样的话,您还可以发布活动的xml文件,以便我们可以帮助您完成拼图的每个部分吗?

答案 1 :(得分:3)

scrollView.contentSize = image.size;

你必须调整这一行。您明确将滚动视图内容大小设置为图像大小。您必须设置内容大小以适合屏幕宽度。

答案 2 :(得分:2)

您可以在UIScrollView中使用UIView,并且UIView包含UIImage。 您需要正确设置约束。

答案 3 :(得分:0)

  

经过多次挖掘后,我发现通过停用Adjust Scroll来解决这个问题   查看Insets,滚动视图内的图像可以正确显示   垂直定位。不过,我还没有得到垂直的理由   首先是错位......

原因是视图控制器的automaticAdjustsScrollViewInsets属性默认为YES,以下是来自apple文档:

  

automaticAdjustsScrollViewInsets

     

指示的布尔值   视图控制器是否应自动调整其滚动   查看插图。

     

默认值为YES,允许视图控制器调整其值   滚动视图插入以响应所消耗的屏幕区域   状态栏,导航栏以及工具栏或标签栏。如果你设置为NO   想要自己管理滚动视图插入调整,例如何时   视图层次结构中有多个滚动视图。

除了设置automaticAdjustsScrollViewInsets = No之外,您还可以在使用autoLayout时将scrollView固定到topLayoutGuide(而不是viewController' s视图的顶部)。