2017-11-03 22 views
0

테이블 뷰를 다시로드 할 때마다 다음에 heightForRowAt이 호출됩니다. 그 다음되는 순서는 다음과 같습니다 나는 numberOfSections, numberOfRowsInSection, viewForHeaderInSection 방법을 오버라이드 (override) 한UITableView에서 cellForRowAt 다음에 heightForRowAt가 호출 중입니다.

numberofsections -> numberOfRowsInSection -> cellForRowAt -> heightForRow 

. 이것들은 heightForRowcellForRowAt이라고하는 순서에 영향을 줍니까? 내가 엑스 코드 9.1을 사용하고

는 스위프트 3은 현재 두 가지 옵션이 아이폰 OS (11)

+0

UI 출력이 변경 되었습니까? –

+0

더 많은 코드를 표시 할 수 있습니까? 나는 당신이 잘못된 장소에서 어떤 방법을 부르고 있다고 생각합니다. –

+1

왜 그게 문제라고 생각하니? 그 행에 대해 셀을 반환하지 않는 한 OS가 왜 'heightForRow'를 호출합니까? 첫 번째 셀은'cellForRow'를 통해 생성 될 필요가 있습니다. 그리고 원한다면'heightForRow'를 통해 반환함으로써 높이를 조정할 수 있습니다. – execv

답변

0

에서 실행 :

  1. 이 방법으로 세포의있는 contentView 확인을 그것은 크기의 정의합니다. 레이아웃이 야심 차게 이루어져서는 안됩니다.
  2. 크기를 수동으로 계산하십시오. 하위보기 사이의 오프셋 (높이)을 합산합니다. 여기에 label/textView 크기를 계산하는 데 문제가있을 수 있습니다 (사용하는 텍스트 크기를 계산할 때 도우미 확장을 남겨 둡니다). textView.contentInsets에 주목하십시오! 당신은

    extension String { 
        func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat { 
         let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude) 
         let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, 
               attributes: [NSAttributedStringKey.font: font], context: nil) 
    
         return ceil(boundingBox.height) 
        } 
    
        func width(withConstraintedHeight height: CGFloat, font: UIFont) -> CGFloat { 
         let constraintRect = CGSize(width: .greatestFiniteMagnitude, height: height) 
         let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, 
               attributes: [NSAttributedStringKey.font: font], context: nil) 
    
         return ceil(boundingBox.width) 
        } 
    } 
    

그것은 당신을 도울 것입니다 희망 올바른 크기를 얻을 너무 그것을 마음을 계속해야합니다!