Objective-c - 처음 몇 개의 데이터 소스만 tableView에 표시되지 않습니다. 아래로 드래그하면 완전히 표시됩니다. 이유는 무엇입니까?
曾经蜡笔没有小新2017-05-02 09:29:21
0
1
619
tableView의 셀이 추가되어 셀의 높이를 계산하고 뷰 컨트롤러에 반환되는 프록시 메서드를 호출합니다. 서버가 데이터 소스를 반환하면 tableView를 새로 고칩니다. 그런데 이때 실행된 cellForRowIndexPath의 indexPaht는 4번째 줄부터 시작하는데, 처음 몇 개는 건너뛰고, 셀의 높이를 고정값으로 쓰려고 했더니 결과가 나왔습니다. 셀 수가 정상이라는 건가요? 무엇이 문제인가요?
고도 계산이 늦어지는 것 같습니다. tableView의 표시 순서는 대략 다음과 같습니다. 요청 sectionNumber 및 numberForSection에 섹션과 셀이 몇 개 있는지 가져옵니다. 인터페이스에 표시될 셀의 높이를 가져오려면 heightForRow:atIndexPath을 요청하세요. 은 cellForRow에게 이 셀의 인스턴스를 가져오도록 요청합니다. 그런 다음 셀의 높이 등을 설정합니다. 레이아웃 후 willDisplay 등의 콜백 메서드를 호출하여 인터페이스에 표시합니다.
따라서 tableView를 새로 고칠 때 높이 부분 처리는 셀 인스턴스가 셀 높이를 계산하도록 한 다음 컨트롤러를 다시 호출하는 대신 데이터 소스에 따라 먼저 셀 높이를 계산하는 것이어야 합니다. 물론, 셀 내에서 계산할 수도 있습니다. 예를 들어, 셀에 들어오는 셀 데이터를 기반으로 계산되는 클래스 메서드가 있고 컨트롤러가 이 메서드를 적극적으로 호출합니다. 대략적인 코드는 다음과 같습니다.
고도 계산이 늦어지는 것 같습니다.
tableView의 표시 순서는 대략 다음과 같습니다.
요청
sectionNumber
및numberForSection
에 섹션과 셀이 몇 개 있는지 가져옵니다. 인터페이스에 표시될 셀의 높이를 가져오려면heightForRow:atIndexPath
을 요청하세요.은
cellForRow
에게 이 셀의 인스턴스를 가져오도록 요청합니다.그런 다음 셀의 높이 등을 설정합니다. 레이아웃 후
willDisplay
등의 콜백 메서드를 호출하여 인터페이스에 표시합니다.따라서 tableView를 새로 고칠 때 높이 부분 처리는 셀 인스턴스가 셀 높이를 계산하도록 한 다음 컨트롤러를 다시 호출하는 대신 데이터 소스에 따라 먼저 셀 높이를 계산하는 것이어야 합니다. 물론, 셀 내에서 계산할 수도 있습니다. 예를 들어, 셀에 들어오는 셀 데이터를 기반으로 계산되는 클래스 메서드가 있고 컨트롤러가 이 메서드를 적극적으로 호출합니다. 대략적인 코드는 다음과 같습니다.
컨트롤러 또는 tableView의 대리자 구현 클래스에서:
으아아아MyTableViewCell:
으아아아