1

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)

    }
}
Walter M
  • 4,993
  • 5
  • 22
  • 29

1 Answers1

2

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

Community
  • 1
  • 1
Rob Norback
  • 6,401
  • 2
  • 34
  • 38