AppStoreみたいなスクロールをUIKit+AutoLayoutで

供養です。ライブラリ使ってまふ。
![kuyou.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247389/5bc6be50-d07c-acd4-911d-aafcd442731a.gif)


```swift
import UIKit
import SnapKit
import Then

class AppStoreLikeScrollViewController: BaseViewController {
    // MARK: - view
    
    private let titleLabel = UILabel().then { (v) in
        v.translatesAutoresizingMaskIntoConstraints = false
        v.font = .preferredFont(forTextStyle: .largeTitle)
        v.text = "タイトル"
        v.textColor = .darkText
    }
    
    private func scrollTest() -> UIView {
        let stack = UIStackView().then { (v) in
            v.translatesAutoresizingMaskIntoConstraints = false
            v.distribution = .equalSpacing
            v.spacing = 8
        }
        let scroll = UIScrollView().then { (v) in
            v.translatesAutoresizingMaskIntoConstraints = false
            v.clipsToBounds = false
            v.isPagingEnabled = true
            
            v.addSubview(stack)
            stack.snp.makeConstraints { (make) in
                make.edges.equalToSuperview()
                make.height.equalToSuperview()
            }
            
            for _ in 0..<10 {
                let cell = UIView().then { (v) in
                    v.translatesAutoresizingMaskIntoConstraints = false
                    v.backgroundColor = .gray
                    v.cornerRadius = 10
                }
                
                stack.addArrangedSubview(cell)
                cell.snp.makeConstraints { (make) in
                    make.width.equalTo(v).offset(-8)
                }
            }
        }
        return UIView().then { (v) in
            v.translatesAutoresizingMaskIntoConstraints = false
            
            v.addSubview(scroll)
            scroll.snp.makeConstraints { (make) in
                make.height.equalTo(200)
                make.left.equalToSuperview()
                make.right.equalToSuperview().offset(8)
                make.top.bottom.equalToSuperview()
            }
        }
    }
    
    private func mainStack() -> UIStackView {
        let scrollTest = self.scrollTest()
        return UIStackView().then { (v) in
            v.translatesAutoresizingMaskIntoConstraints = false
            v.axis = .vertical
            v.spacing = 16
            
            v.addArrangedSubview(titleLabel)
            v.addArrangedSubview(scrollTest)
        }
    }
    
    private func scroll() -> UIScrollView {
        let mainStack = self.mainStack()
        
        return UIScrollView().then { (v) in
            v.translatesAutoresizingMaskIntoConstraints = false
            
            v.addSubview(mainStack)
            
            mainStack.snp.makeConstraints { (make) in
                make.edges.equalToSuperview().inset(UIEdgeInsets(top: 16, left: 16, bottom: 16, right: 16))
                make.width.equalToSuperview().offset(-32)
            }
        }
    }
    
    private func setupLayout() {
        if #available(iOS 13.0, *) {
            view.backgroundColor = .systemBackground
        } else {
            view.backgroundColor = .white
        }
        
        let scroll = self.scroll()
        
        view.addSubview(scroll)
        
        scroll.snp.makeConstraints { (make) in
            make.edges.equalTo(view.safeAreaLayoutGuide)
        }
    }
    
    // MARK: - variables
    
    override func loadView() {
        super.loadView()
        
        setupLayout()
    }
}
```