iOS

[iOS] Swift UIScrollView AutoLayout 스크롤뷰 레이아웃 설정하기

Kim_Baechu 2020. 11. 13. 15:26

 

스크롤 뷰를 추가하면

Content Layout GuideFrame Layout Guide가 생깁니다.

 

 

 

 

contentLayoutGuide는 스크롤 되는 긴 뷰를 생각하시면 될 것 같습니다.

 

frameLayoutGuide는 스크롤뷰에서 화면에 보여주는 영역을 설정한다고 생각하면 될 것 같아요.

 

 

 

구분을 위해서 백그라운드는 노란색으로 칠하고 스크롤뷰는 20씩 제약을 줬습니다.

다음으로 스크롤뷰 안에 실제 내용을 담을 View를 넣어줍니다.

처음에 Content Layout Guide를 스크롤되는 긴 뷰라고 했죠.

그래서 이 내부 View의 제약을 Content Layout Guide에 설정합니다.

이렇게 제약을 설정하면 문제가 생기는데

이렇게 제가 의도하지 않은 숫자들이 추가되니까 0으로 고쳐주세요.

 

Frame Layout Guide는 화면에 보여지는 영역이라고 했죠.

이 프레임에 Equal Widths를 하면 가로는 Frame과 일치시켜 세로로 스크롤이 되고,

이 프레임에 Equal Heights를 하면 세로가 Frame과 일치시켜 가로로 스크롤이 됩니다.

여기서도 이렇게 설정하면 다음과 같이 제가 원하는대로 설정이 안되니

수정을 해주세요.

그 다음 뷰의 높이를 정해주시면 됩니다.

저는 이 뷰의 높이를 1000으로 했습니다.

 

이렇게 표시되면 정상적으로 설정된겁니다.

 

코드로 스크롤 뷰를 만들어보겠습니다.

class ViewController: UIViewController {

    let scrollView = UIScrollView()
    let innerView = UIView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .systemYellow
        createUI()  
    }
}

extension ViewController {
    func createUI() {
        let safeArea = view.safeAreaLayoutGuide
        view.addSubview(scrollView)
        
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        
        scrollView.topAnchor.constraint(equalTo: safeArea.topAnchor, constant: 20).isActive = true
        scrollView.bottomAnchor.constraint(equalTo: safeArea.bottomAnchor, constant: -20).isActive = true
        scrollView.leadingAnchor.constraint(equalTo: safeArea.leadingAnchor, constant: 20).isActive = true
        scrollView.trailingAnchor.constraint(equalTo: safeArea.trailingAnchor, constant: -20).isActive = true
        
        scrollView.addSubview(innerView)
        
        innerView.backgroundColor = .white
        innerView.translatesAutoresizingMaskIntoConstraints = false
        innerView.topAnchor.constraint(equalTo: scrollView.contentLayoutGuide.topAnchor).isActive = true
        innerView.bottomAnchor.constraint(equalTo: scrollView.contentLayoutGuide.bottomAnchor).isActive = true
        innerView.leadingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.leadingAnchor).isActive = true
        innerView.trailingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.trailingAnchor).isActive = true
        
        innerView.widthAnchor.constraint(equalTo: scrollView.frameLayoutGuide.widthAnchor).isActive = true
        innerView.heightAnchor.constraint(equalToConstant: 1000).isActive = true
        
    }
}

 

아래 log에 대해서 아시는 분 댓글 부탁드립니다. 무시해도 된다고 하는데 맞겠죠??

2020-11-13 16:07:16.811547+0900 ScrollViewCode[13272:263968] [TraitCollection] Class CKBrowserSwitcherViewController overrides the -traitCollection getter, which is not supported. If you're trying to override traits, you must use the appropriate API.