首页 > 解决方案 > 具有更宽 UIView 的 UIScrollView 不滚动

问题描述

我正在学习用来UIScrollView制作几张可以水平滚动的图片。这些图像以编程方式作为子视图添加到UIViewinside UIScrollView。“启用滚动”也设置为 true。但是,当我运行应用程序时,UIScrollView无法滚动。

这是我的代码。

class ViewController: UIViewController {

    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var scrollContentView: UIView!

    var imageViews = [UIImageView]()

    override func viewDidLoad() {
        super.viewDidLoad()

        let imageWidth: CGFloat = 200.0 / 768.0 * 1024.0

        for i in 1...3 {
            let image = UIImage(named: "image\(i)")
            let imageView = UIImageView(image: image)
            imageViews.append(imageView)

            let x: CGFloat = CGFloat(i - 1) * (imageWidth + 10)
            scrollContentView.addSubview(imageView)
            print(imageView.frame)
            imageView.frame = CGRect(x: x, y: 0, width: imageWidth, height: 200.0)
        }

        scrollContentView.frame = CGRect(x: 0.0, y: 0.0, width: imageWidth * 3 + 20.0, height: 200.0)

        scrollView.contentSize = scrollContentView.frame.size

    }

}

在此处输入图像描述

标签: iosswift

解决方案


无需scrollContentView在 Interface Builder 中创建,而是以编程方式创建它。

Xcode 将不再抱怨缺少约束,您将能够手动使用框架。

class ViewController: UIViewController {

    @IBOutlet weak var scrollView: UIScrollView!
    var scrollContentView: UIView!

    var imageViews = [UIImageView]()

    override func viewDidLoad() {
        super.viewDidLoad()

        scrollContentView = UIView()
        scrollView.addSubview(scrollContentView)

        let imageWidth: CGFloat = 200.0 / 768.0 * 1024.0

        for i in 1...3 {
            let image = UIImage(named: "image\(i)")
            let imageView = UIImageView(image: image)
            imageViews.append(imageView)

            let x: CGFloat = CGFloat(i - 1) * (imageWidth + 10)
            scrollContentView.addSubview(imageView)
            print(imageView.frame)
            imageView.frame = CGRect(x: x, y: 0, width: imageWidth, height: 200.0)
        }

        scrollContentView.frame = CGRect(x: 0.0, y: 0.0, width: imageWidth * 3 + 20.0, height: 200.0)

        scrollView.contentSize = scrollContentView.frame.size

    }

}

推荐阅读