Search code examples
iosswiftuiviewuiscrollviewuicollectionview

UIScrollView not showing up in the view


I am implementing a UIScrollView in a CollectionViewCell. I have a custom view which the scroll view should display, hence I am performing the following program in the CollectionViewCell. I have created everything programmatically and below is my code :

struct ShotsCollections {
    let title: String?
}

class ShotsMainView: UICollectionViewCell {

    override init(frame: CGRect) {
        super.init(frame: frame)

        setupViews()

        containerScrollView.contentSize.width = frame.width * CGFloat(shotsData.count)

        shotsData = [ShotsCollections.init(title: "squad"), ShotsCollections.init(title: "genral")]
        var i = 0
        for data in shotsData {

            let customview = ShotsMediaView(frame: CGRect(x: containerScrollView.frame.width * CGFloat(i), y: 0, width: containerScrollView.frame.width, height: containerScrollView.frame.height))

            containerScrollView.addSubview(customview)
            i += 1
        }

    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    var shotsData = [ShotsCollections]()

    var containerScrollView: UIScrollView = {
        let instance = UIScrollView()
        instance.isScrollEnabled = true
        instance.bounces = true
        instance.backgroundColor = blueColor
        return instance
    }()


    private func setupViews() { //These are constraints by using TinyConstraints
        addSubview(containerScrollView)
        containerScrollView.topToSuperview()
        containerScrollView.bottomToSuperview()
        containerScrollView.rightToSuperview()
        containerScrollView.leftToSuperview()
    }
}

Now the issue is, while the scrollview is displayed, the content in it is not. I on printing the contentSize and frame of the scrollview, it displays 0. But if I check the Debug View Hierarchy, scrollview containes 2 views with specific frames.

I am not sure whats going wrongs. Any help is appreciated.


Solution

  • When you are adding customView in your containerScrollView, you are not setting up the constraints between customView and containerScrollView.

    Add those constraints and you will be able to see your customViews given that your customView has some height. Also, when you add more view, you would need to remove the bottom constraint of the last added view and create a bottom constraint to the containerScrollView with the latest added view.