본문 바로가기

IOS (아이폰)/iOS

iOS TableView Scroll To Top

UITableView의 setContentOff를 통한 스크롤이 잘 되지 않는 문제가 발견 되었습니다.


문제점


Status Bar 터치했을 때 처럼

TableView의 스크롤 영역을 최상단을 보내기 위해

앱 하단영역에 Top 버튼을 제공했습니다.

하지만 TableView의 Cell 많아지면 해당 기능이 제대로 동작을 하지 않았습니다.


Top 버튼을 동작하는 코드는 아래와 같이

[_tableView setContentOffset:CGPointMake(0, 0) animated:YES];


TableView의 contentOff을 0,0으로 만들고 애니메이션 효과를 주는 방식으로

테이블뷰의 스크롤을 최상단으로 올리고 있었습니다.




동영상 첨부가 되지 않아 GIF로 올렸습니다.



원인


원인은 OS11에서 TableView속성 중 estimatedRowHeight의 기본값이 UITableViewAutomaticDimension로 변경되었습니다.


estimatedRowHeight 속성이란 테이블 뷰에서 예상되는 행의 높이 입니다.

estimatedRowHeight의 값이 AutomaticDimension으로 설정되어있어 행의 높이 값이 잘못 되어 스크롤 Position 값이 영향을 받는것으로 추측 하고있습니다.


해결 방법


estimatedRowHeight 값을 0으로 설정해서 자동 조정을 무효화 시켰습니다. 

_tableView.estimatedRowHeight = 0;