위 영상처럼 처음 로드했을 때에는 섹션 헤더가 제대로 보이지만, ( xib 를 사용한 Custom Section Header )
나중에 해당 섹션만 reload 했을 때 Section Header 가 보이지 않는 문제가 발생했습니다.
Stack Overflow 에 나와있는 일반적인 해결 방법은 아래와 같습니다.
1. UITableViewDelegate 프로토콜에서 heightForHeaderInSection 리턴하기.
2. reloadRows 대신 reloadSection 으로 해당 섹션 리로드 하기
제 경우에는 위 두가지 방식으로도 해결되지 않아서 구글링을 하며 더 찾아보았습니다.
// UITableView Delegate
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
switch section {
case 3:
guard let sectionHeader = tableView.dequeueReusableCell(withIdentifier: DetailMovieCommentNavigationCell.cellIdentifier) as? DetailMovieCommentNavigationCell else {
return nil
}
sectionHeader.editButton.addTarget(self, action: #selector(editButtonTapped), for: .touchUpInside)
// return sectionHeader
return sectionHeader.contentView
default:
return nil
}
}
해결 방법은 "viewForHeaderInSection에서 cell 의 contentView 를 리턴하는 것입니다."
일반적으로 Cell 혹은 Cell as UIView 로 다운 캐스팅하여 리턴해도 문제가 없지만,
특정 섹션만 리로드 해야하는 경우, Cell.contentView 를 리턴해주면 제대로 동작되는 것을 볼 수 있습니다.
* 추가 : iOS 개발을 얼마 배우지 않고 작성한 글이라 틀린 부분을 추가합니다.
TableView 에서 Header 혹은 Footer View를 사용할 때 TableViewCell 로 서브클래싱하는 것이 아니라,
UITableViewHeaderFooterView 로 서브클래싱하는 것이 올바른 방법입니다.
참고:
https://stackoverflow.com/questions/23424951/uitableview-section-header-disappears-if-i-insert-or-delete-rows/45925885
'iOS Dev > Swift' 카테고리의 다른 글
iOS JSON 을 Decoding 하는 여러 가지 방식들 (0) | 2021.08.26 |
---|---|
지금까지 받았던 코드 리뷰 정리 ( iOS, Swift ) (0) | 2020.11.10 |
Swift Optional ( enum, wrapped ) 정리 (0) | 2020.10.12 |
Swift ARC ( Automatic Reference Counting ) 정리 (2) | 2020.10.07 |
윈도우 10 에서 Swift 5 사용하기 ( Visual Code, WSL ) (4) | 2020.08.01 |