iOS/코드조각

[iOS, Swift] 스크롤 뷰 만들기 programmatic

검은참깨두유vm 2022. 6. 22. 09:17
반응형

iOS 15, Xcode 13.31, Swift 5, UIKit 환경에서 진행했습니다.

// 스크롤뷰와 컨텐츠를 담을 contentView 생성
private let contentScrollView: UIScrollView = {
    let scrollView = UIScrollView()
    scrollView.backgroundColor = .white
    scrollView.showsVerticalScrollIndicator = true

    return scrollView
}()
private let contentView: UIView = {
    let view = UIView()
    return view
}()
// 스크롤뷰 view에 등록
view.addSubview(contentScrollView)
contentScrollView.addSubview(contentView)
applyScrollConstraints() // Constraints 등록
// 스크롤뷰는 최상위뷰에 컨텐츠뷰는 스크롤뷰에 맞춰 등록합니다.
// 세로로 스크롤을 줄 때는 contentView.widthAnchor를 등록합니다.
func applyScrollConstraints() { 
    contentScrollView.translatesAutoresizingMaskIntoConstraints = false
    contentView.translatesAutoresizingMaskIntoConstraints = false
    let scrollViewConstraints = [
        contentScrollView.topAnchor.constraint(equalTo: self.view.topAnchor),
        contentScrollView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
        contentScrollView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
        contentScrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
    ]
    let contentViewConstraints = [
        contentView.topAnchor.constraint(equalTo: contentScrollView.topAnchor),
        contentView.leadingAnchor.constraint(equalTo: contentScrollView.leadingAnchor),
        contentView.trailingAnchor.constraint(equalTo: contentScrollView.trailingAnchor),
        contentView.bottomAnchor.constraint(equalTo: contentScrollView.bottomAnchor),
        contentView.widthAnchor.constraint(equalTo: contentScrollView.widthAnchor)
    ]
    NSLayoutConstraint.activate(scrollViewConstraints)
    NSLayoutConstraint.activate(contentViewConstraints)
}

주의점으로 contentView에 담긴 뷰들의 Constraints 값이

상위 뷰가 아닌 contentView에 제약이 걸려있어야 스크롤이 잘 작동합니다.

반응형