ScrollView contentSize 大于 Bounds,但没有滚动

Posted

技术标签:

【中文标题】ScrollView contentSize 大于 Bounds,但没有滚动【英文标题】:ScrollView contentSize Larger than Bounds, Yet No Scrolling 【发布时间】:2015-07-25 00:11:42 【问题描述】:

我有一个包含单个图像的滚动视图。图像的边界大于滚动视图的框架。我已将滚动视图的 contentSize 设置为等于图像的边界。 然而没有滚动。我不知道是什么原因造成的。

 override func viewDidLoad() 
        super.viewDidLoad()
        var matches = SortThread.getSortThread().retrieveMatches()

        scrollView.frame = CGRectMake(0, navigationController!.navigationBar.frame.height - 20, UIScreen.mainScreen().bounds.width, view.bounds.height - (navigationController!.navigationBar.frame.height - 20))

        var imageName = String()
        imageName = matches[0].pictures![0]
        var parsedImageName = imageName.componentsSeparatedByString(".") as [String]
        var newImageName: String = parsedImageName[0] as String
        let path = NSBundle.mainBundle().pathForResource("MVLMP Images (Resized)/" + newImageName, ofType: "jpg")
        var image = UIImage()
        image = UIImage(contentsOfFile: path!)!
        var imageView = UIImageView(image: image)

        var ratio: CGFloat = image.size.width/image.size.height
        var screenHeight: CGFloat = UIScreen.mainScreen().bounds.height - navigationController!.navigationBar.frame.height - 20

        if(ratio > 1)

            imageView.frame = CGRectMake(0, 0, ((scrollView.bounds.width)/7) * 6, 0)
            imageView.frame = CGRectMake(0, 0, imageView.frame.width, imageView.frame.width * ratio)

         else 

            imageView.frame =  CGRectMake(0, 0, 0, (screenHeight/9)*8)

            imageView.frame = CGRectMake(0, 0, imageView.frame.height * ratio, imageView.frame.height)

        

        scrollView.addSubview(imageView)
        scrollView.contentSize.width = imageView.frame.width
        scrollView.contentSize.height = imageView.frame.height

    


我已经打印出 scrollView.contentSize.width 和 scrollView.bounds.width 并且内容宽度实际上比边界宽度大 40 左右。

【问题讨论】:

我看到你设置了scrollView的contentSize = image.frame。这可能是个问题,因为滚动与子视图的框架有关。 你是对的。就在几分钟前,我意识到我应该添加包含我的图像的区域的宽度,在许多情况下不一定是我的图像的宽度。谢谢你的评论穆东:)! 【参考方案1】:

正如 Muc Dong 评论的那样,我正在将图像的宽度添加到滚动视图的 contentSize.width 中。这不一定是正确的做法,因为在我的情况下,我没有考虑到的图像之间存在一些余量。此边距应包含在对 scrollView.contentSize.width 的添加中。

【讨论】:

以上是关于ScrollView contentSize 大于 Bounds,但没有滚动的主要内容,如果未能解决你的问题,请参考以下文章

添加依赖于scrollView.contentSize的子视图的正确位置是啥?

ScrollView.contentSize 问题无法在顶部、左侧、右侧正确滚动?

在我的情况下,如何正确获取 scrollView 的 contentSize、zoomScale 和 contentOffset?

在 addSubview 中调用具有动态 ScrollView ContentSize Autolayout 的 CustomView

contentSizecontentInset和contentOffset 是 scrollView三个基本的属性区别和使用

UITableView 高度等于 contentSize 高度