frame view와 content view를 가진다.
framecontentSizecontent size > frame size 인 경우 scroll이 가능하다.
frame, content size를 변경함으로써 가로, 세로 scroll을 생성할 수 있다.

UIKit에서 UITableView, UICollectionView의 parent class이다.
UIScrollView class의 기능을 상속받는다.
보통 새로운 view(subview)를 content view에 연결시켜 content view를 관리한다.
content view 역할의 subview를 scroll view의 content area와 동일하도록 설정한다.
(Constant value 0으로 설정)

content view 역할의 subview와 Frame Layout Guide를 control-dragging 하여, Equal Widths 설정
ex) 가로 scroll이 존재하지 않도록 설정
Constant: 0, Multiplier: 1 로 설정하여 subview와 frame view의 너비를 동일하게 설정
ex) scroll view 내부에 image view가 존재하고 줌인, 줌아웃 시 이미지를 중심에 위치하고 싶을 경우
// image view의 중심을 scroll view의 content layout의 중심에 맞춘다.
imageView.centerXAnchor.constraints(equalTo: scrollView.contentLayoutGuide.centerXAnchor)
imageView.centerYAnchor.constraints(equalTo: scrollView.contentLayoutGuide.centerYAnchor)

contentInset property)을 조절할 수 있다.
scrollIndicatorInset property를 통해 같은 방식으로 padding을 생성한다.@IBOutlet var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
registerForKeyboardNotifications()
}
func registerForKeyboardNotifications() {
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWasShown(_:)),
name: UIResponder.keyboardDidShowNotification,
object: nil
)
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillBeHidden(_:)),
name: UIResponder.keyboardWillHideNotification,
object: nil
)
}
@objc func keyboardWasShown(_ notificiation: NSNotification) {
guard let info = notificiation.userInfo,
let keyboardFrameValue =
info[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue else { return }
let keyboardFrame = keyboardFrameValue.cgRectValue
let keyboardSize = keyboardFrame.size
// 키보드의 길이만큼 content area의 padding을 더해 content를 위로 끌어 올린다.
// contentInset: scroll view content의 buffer area
let contentInsets = UIEdgeInsets(top: 0.0, left: 0.0,
bottom: keyboardSize.height, right: 0.0)
scrollView.contentInset = contentInsets
// scroll indicator(스크롤 바)가 키보드에 가려지지 않도록 위로 끌어 올린다.
scrollView.scrollIndicatorInsets = contentInsets
}
@objc func keyboardWillBeHidden(_ notification:
NSNotification) {
let contentInsets = UIEdgeInsets.zero
scrollView.contentInset = contentInsets
scrollView.scrollIndicatorInsets = contentInsets
}