UIScrollView의 AutoLayout 요약

입문


AutoLayout에 Storyboard의 UIScrollView만 설치하려면 상당히 혼란스럽습니다.
여러 가지 일을 하면서 이해를 했으니까 정리해 봅시다.

UIScrollView 매개변수 정보


UIScrollView에서 표시할 내용을 관리하는 매개 변수로 사용
  • contentOffset
  • contentInset
  • contentSize
  • 에서 설명한 대로 해당 매개변수의 값을 수정합니다.
    contentOffset 스크롤이 얼마나 됩니까?
    contentInset을 얼마나 더 스크롤할 수 있습니까?
    contentSize는 스크롤 내용의 크기입니다.
    따로따로 표시하다.
    AutoLayout은 컨텐츠에 따라 자동으로 contentSize를 결정합니다.

    구조


    이 글에서 UIScrollView의 contentSize 크기의 스크롤 View는 contentView라고 부른다.
    혼란의 근원은
    "UIScrollView에 배치된 View 제약조건은 UIScrollView가 아니라 contentView의 제약조건입니다. 이를 바탕으로 contentSize를 결정합니다."
    그렇습니다.
    그림을 잘못 그려서 죄송합니다. 다음 내용을 보십시오.

    이러한 제한이 있으면 contentSize는 600x500입니다.
    즉, 외관상 UIScrollView에 대한 제한은 contentView에 대한 것이다.
    외관에 현혹되지 마라. 제약이 UIScrollView와 같은 크기의View가 아니라 contentView를 겨냥한 것임을 깨닫게 되면 혼란스럽지 않을 것이다.

    실천


    그럼에도 불구하고 이런 구조를 이해해도 콘텐츠 크기를 자주 의식하고 제한하기는 어렵다.
    따라서 저는 개인적으로 UIScrollView 바로 아래에 UIVIew 하나만 설정하고 위아래 좌우에 0pt의 제한을 가하는 방법을 추천합니다.
    그러면 나중에 UIVIEW의 높이와 너비만 결정하면 됩니다.
    엑스코드에서 이런 느낌이에요.

    이 상태에서 UIVIew에 너비와 높이 제한이나 하위 뷰를 추가하면 이해가 깊어집니다.
    또한 예를 들어 가로로만 스크롤하려면 UIVIEW와 UIScrollView 사이에 Equals Heights의 제한을 넣으면 된다.

    겸사겸사 말씀드리다


    콘텐츠오프셋과 콘텐츠인셋은 AutoLayout에서 무력합니다.
    사용자 정의 실행 속성에서 contentInset을 지정할 수 있습니다.
    이런도 있습니다. 하지만 제 Xcode에는 없습니다.
    콘텐츠 오프셋은 AutoLayout을 적용한 후viewDidLayout에서 설정하는 것이 가장 좋다고 생각합니다.

    참고 자료


    인용하다
    Qiita 글

    좋은 웹페이지 즐겨찾기