해당 이슈는 UITableView의 셀 높이들이 동적일 때 리로드할 때 스크롤 위치가 이상한 곳으로 설정되어집니다.
유연하고 부드러운 테이블뷰를 만들기 위해서는 heightForRowAt, estimatedHeightForRowAt 모두 적절히 지정되어야합니다.
estimatedHeightForRowAt를 잘 지정해줘야 리로드할 때 예상한 셀 높이에 따라 스크롤 포지션이 정해집니다.
해결 방법
셀 높이를 저장할 프로퍼티를 추가하여 willDisplay에서 셀 높이를 저장하고, estimatedHeightForRowAt에서 저장한 셀 높이를 반환하여 해결.
// MARK: - Property
private var cellHeights: [IndexPath: CGFloat] = [:]
// MARK: - willDisplay
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
self.cellHeights[indexPath] = cell.frame.size.height
}
// MARK: - estimatedHeightForRowAt
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
if let height = self.cellHeights[indexPath] {
return height
}
return UITableView.automaticDimension
}
'iOS Trouble Shooting' 카테고리의 다른 글
[iOS] iOS13 앱 푸시 장치 토큰(deviceToken) 관련 이슈 (0) | 2020.01.05 |
---|---|
[iOS] iOS13 StatusBar Crash 이슈 (0) | 2020.01.05 |