Post

UIKit - UIScrollView 사용하기

UIKit - UIScrollView 사용하기

이 게시글은 UIScrollView의 개념이 코드 베이스로 UIScrollView를 사용하는 것을 기록함.

UIScrollView는 화면을 스크롤 하거나, 확대/축소할 수 있게 해줌.

UITableView, UICollectionView 모두 UIScrollView를 상속하고 있음.

TodoDetailView.swift

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import UIKit

class TodoDetailView: UIView {
    
    // MARK: - UIScrollView 인스턴스 생성
    private let scrollView: UIScrollView = {
        let scrollView = UIScrollView()
        
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        
        return scrollView
    }()

    // MARK: - UIScrollView에 적용시킬 ContentView 인스턴스 생성
    private let contentView: UIView = {
        let view = UIView()
        
        view.translatesAutoresizingMaskIntoConstraints = false
        
        return view
    }()

    ...

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

    private func setupUI(){
        ...
        
        self.addSubview(scrollView) // UIScrollView 추가
        scrollView.addSubview(contentView) // UIScrollView에 ContentView 추가
        
        // ContnetView 하위에 표시할 요소 추가
        contentView.addSubview(todoTitleLabel)
        contentView.addSubview(createdDateLabel)
        contentView.addSubview(completedStackView)
        contentView.addSubview(descriptionStackView)

        // 오토레이아웃 설정
        setupScrollView()

        ...
    }

    private func setupScrollView(){
        NSLayoutConstraint.activate([
          // UIScrollView 화면에 꽉 차게 설정
            scrollView.leadingAnchor.constraint(equalTo: self.leadingAnchor),
            scrollView.trailingAnchor.constraint(equalTo: self.trailingAnchor),
            scrollView.topAnchor.constraint(equalTo: self.topAnchor),
            scrollView.bottomAnchor.constraint(equalTo: self.bottomAnchor),
            
          // ContentView UIScrollView 크기에 맞게 설정
            contentView.leadingAnchor.constraint(equalTo: self.scrollView.leadingAnchor),
            contentView.trailingAnchor.constraint(equalTo: self.scrollView.trailingAnchor),
            contentView.topAnchor.constraint(equalTo: self.scrollView.topAnchor),
            contentView.bottomAnchor.constraint(equalTo: self.scrollView.bottomAnchor),
            contentView.widthAnchor.constraint(equalTo: self.scrollView.widthAnchor)
        ])
    }

    ...

    private func setupDescriptionStackView(){
        NSLayoutConstraint.activate([
            displayDescriptionLabel.heightAnchor.constraint(equalToConstant: 30),
            
            descriptionStackView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 10),
            descriptionStackView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -10),
            descriptionStackView.topAnchor.constraint(equalTo: completedStackView.bottomAnchor, constant: 30),

            // UIStackView와 같이 동적으로 크기가 조정되는 요소는 UIScrollView에 표시되는 마지막 요소에는 bottomAnchor 설정이 필수적으로 필요함
            descriptionStackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -30)
        ])
    }
}

결과

image

Reference

This post is licensed under CC BY 4.0 by the author.