contentOffset & contentInset

이건준·2022년 8월 25일
0
post-thumbnail

1. 문제제기

  • UIScrollView를 사용하다보면 contentOffset과 contentInset에 대해서 많이 본적이 있을것이다, 오늘은 저 2개에 대해서 공부를 해볼것이다

2. contentOffset

  • UIScrollView를 사용하면은 스크롤이 가능하게 됩니다, 눈으로 보이기에 스와이프를 통해 스크롤가능하게끔 보이지만 실제로는 contentOffset값이 변경되면서 스크롤되는것처럼 보이는것이다
let newOffset = scrollView.contentOffset.y
scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y: newOffset + 100)
  • contentOffset값을 변경되면서 서브뷰의 위치가 이동되는것처럼 보여지는것을 확인할 수 있다

  • UIScrollView에 서브뷰들을 넣게되는데 이때 서브뷰들의 위치는 UIScrollView의 contentView의 bounds에 따라 위치가 배치하게된다, 즉 contentOffset이 변경되면 해당 contentView의 bounds값이 변경되어 기존에 배치와 동일하게 되있는데 단지 bounds만 변경되어 마치 안에 서브뷰들이 움직이는것처럼 보여지게 되는것이다

3. contentInset

  • contentInset 또한 UIScrollView에서 자주 사용되는 것 중 하나이다, 이는 해당 뷰의 padding을 변경되는것과 동일한 효과를 준다

Q. adjustedContentInset = contentInset + systemInset

  • 그렇다면 궁금한 점이 생길 것이다, 우리는 UIScrollView를 부모뷰와 동일하게 오토레이아웃을 걸어 따로 contentInset을 변경한적이 없는데도 safeArea에 맞춰서 어느정도 contentInset이 조절되어있는걸 확인할 수 있다

  • 즉 우리가 보는 contentInset은 직접 조절할 수 있는 contentInset과 시스템이 자동으로 조절해주는 systemInset값이 합쳐진 adjustContentInset값에 의해 조절되게 된다

Q. 그러면 systemInset값은 변경할 수 없나요 ??

  • 이를 조절할 수 있는것이 contentInsetAdjustmentBehavior속성을 이용하여 조절할 수 있다, 이는 기본적으로 automatic으로 되어있어서 자동으로 safeArea에 맞춰서 adjustedContentInset를 계산하게된다

0개의 댓글