본문 바로가기

IT/iOs

section header height must not be negative error

개발 작업을 마치고 QA팀에게 검증을 맡겼습니다.!

제발 한 번에 통과되기를 바라지만 역시나 버그 리포트는 올라옵니다.

이번에는 ios9이하 단말에서 강제 종료 현상이 난다는 피드백이 왔습니다.

개발을 하면서 느끼는 것이지만 실무를 하는 개발자들에게 테스트 환경을 구축해주는 것은 정말 중요하다고 생각이 듭니다.

 

하위 버전을 테스트할 수 있는 테스트 기기나 개발자가 최소 한개는 계속 가지고 다닐 수 있는 테스트 기기는 기본적으로 주어져야 한다고 생각하는데 현 직장은 이 부분이 잘 안되어있어서 힘드네요 

그래서 이런 오류가 발생하는것은 당연한 겁니다! 

저 같은 개발자분들 힘내세요!

 

죽는다는 부분에서 디버깅을 해보니 아래와 같은 오류를 엑스코드가 뱉습니다

 

*** Assertion failure in -[UISectionRowData refreshWithSection:tableView:tableViewRowData:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.29.5/UITableViewRowData.m:439

 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'section header height must not be negative - provided height for section 5 is -0.000000'

 

 

내용을 대충 보니 UITableView와 관련이 있고 어떤값이 음수가 들어가는 것 같지요!

 

원인은 아래 코드에 있었습니다.

 

    _tableView.estimatedSectionHeaderHeight = CGFLOAT_MIN;

    _tableView.estimatedSectionFooterHeight = CGFLOAT_MIN;

    _tableView.sectionFooterHeight = CGFLOAT_MIN;

    _tableView.sectionHeaderHeight = UITableViewAutomaticDimension;

 

위처럼 테이블뷰의 헤더 푸터 높이를 강제로 없애는 코드를 적용한 부분에서 발생하는 이슈였습니다.

위 코드는 테이블뷰에 기본으로 적용되어있는 스크롤 인터랙션을 제거하기 위함이었습니다.

 

UITableViewStyleGrouped

 

height를 0으로 주면 해당 인터랙션이 동작을 안 하기 때문에 저렇게 줬는데 문제는 

CGFLOAT_MIN가 ios9 이하에서는 음수 값이 나온다는 겁니다.

해결법은 그냥 integer로 0을 셋팅했습니다.

 

 

 

    _tableView.estimatedSectionHeaderHeight = 0;

    _tableView.estimatedSectionFooterHeight = 0;

    _tableView.sectionFooterHeight = 0;

 

이렇게 말이죠

분기를 할까 했는데 0만 세팅하면 될 것을 분기 처리를 해서 코드를 길게 하고 싶지가 않았습니다. 

 

 

#테이블뷰 인터랙션 제거하는법

#how to uitableview section interaction remove

'IT > iOs' 카테고리의 다른 글

App Store Connect Operation Warning  (0) 2019.11.16
duplicate symbol for architecture arm64 error  (0) 2019.11.09
UIBackgroundTaskIdentifier vs BGTaskScheduler  (0) 2019.11.05
Can't end BackgroundTask error  (7) 2019.10.31
SceneDelegate란  (4) 2019.10.30