Walter M
Walter M

Reputation: 5523

I cannot get UIScrollView to work with UIStackView

I am trying to make StackView content to be scrollable. I inserted dummy UIImage views to try to get it to work but it doesn't scroll. The Stack and Scroll views are already connected to the IB. What am I missing?

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var menuStackView: UIStackView!
    @IBOutlet weak var menuScrollView: UIScrollView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


        var itemImageView = UIImageView(image: UIImage(named: "splash2"))
        itemImageView.contentMode = .ScaleAspectFit
        self.menuStackView.addArrangedSubview(itemImageView)

        itemImageView = UIImageView(image: UIImage(named: "splash2"))
        itemImageView.contentMode = .ScaleAspectFit
        self.menuStackView.addArrangedSubview(itemImageView)

        itemImageView = UIImageView(image: UIImage(named: "splash2"))
        itemImageView.contentMode = .ScaleAspectFit
        self.menuStackView.addArrangedSubview(itemImageView)

        itemImageView = UIImageView(image: UIImage(named: "splash2"))
        itemImageView.contentMode = .ScaleAspectFit
        self.menuStackView.addArrangedSubview(itemImageView)

        itemImageView = UIImageView(image: UIImage(named: "splash2"))
        itemImageView.contentMode = .ScaleAspectFit
        self.menuStackView.addArrangedSubview(itemImageView)

        itemImageView = UIImageView(image: UIImage(named: "splash2"))
        itemImageView.contentMode = .ScaleAspectFit
        self.menuStackView.addArrangedSubview(itemImageView)

        itemImageView = UIImageView(image: UIImage(named: "splash2"))
        itemImageView.contentMode = .ScaleAspectFit
        self.menuStackView.addArrangedSubview(itemImageView)


        itemImageView = UIImageView(image: UIImage(named: "splash2"))
        itemImageView.contentMode = .ScaleAspectFit
        self.menuStackView.addArrangedSubview(itemImageView)


    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        menuScrollView.contentSize = CGSize(width: menuStackView.frame.width, height: menuStackView.frame.height)

    }
}

Upvotes: 1

Views: 1663

Answers (1)

Rob Norback
Rob Norback

Reputation: 6599

My thought would be to create a UIView that you setup your scrollview with. Then add the stack view to that content view. Because otherwise, to make a stackview work like you want it to, I had to add constraints on all sides of it to the scroll view and add a height and width constraint.

I've also answered a similar question here that might help:

https://stackoverflow.com/a/32999501/4626443

And here's the link to a project with a working scrolling stackview that you can use to get going again:

https://github.com/Rnorback/ScrollingStackView

Upvotes: 2

Related Questions