UITableView
가 테이블 셀에 대한 사용자 정의 높이를 갖기 위해 heightForRowAtIndexPath
를 구현하는 것이 필요합니다
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
텍스트 크기 사용을 계산합니다. UITableView
은 데이터를 다시로드 할 때마다 테이블의 전체 높이를 계산하기 때문입니다. 데이터가 정적 인 경우에도 행 높이 계산을 캐시 할 수 있습니다.
10 가지 레이블의 텍스트를 모두 나타내는 데이터 모델 클래스를 만들고이 데이터 모델 클래스에 도우미 함수를 제공하여 heightForRowAtIndexPath
에서 호출 할 수있는 것이 좋습니다. 도우미 기능은 행 높이 계산이 같은 아마 뭔가를 캡슐화하는 것 :
의 당신이 당신의 행의 데이터를 표현하는 데이터 모델 클래스에 대한이 있다고 가정 해 봅시다 : 그런 다음 calculateLabelHeight
방법은 뭔가를 보일 수 있습니다
@interface MyDataModelClass : NSObject
@property (strong, nonatomic) NSString *label1Text;
@property (strong, nonatomic) NSString *label2Text;
// ... etc
- (CGFloat)calculateLabelHeight;
@end
을 (이것은 분명히 단지 의사 코드이다)이 같은 :
:
- (CGFloat)calculateLabelHeight {
CGFloat totalHeight = 0.0;
// Loop through your label texts calculating the variable sized height for each
// and adding some padding in between:
CGSize variableSize1 = [self.label1Text sizeWithFont:[UIFont systemFontOfSize:12.0] constrainedToSize:CGSizeMake(300, 400) lineBreakMode:NSLineBreakByWordWrapping];
CGSize variableSize2 = [self.label2Text sizeWithFont:[UIFont systemFontOfSize:12.0] constrainedToSize:CGSizeMake(300, 400) lineBreakMode:NSLineBreakByWordWrapping];
totalHeight = variableSize1 + padding + variableSize2 + padding; // and so on for all your labels.
return totalHeight;
}
그런 heightForRowAtIndexPath
에서이 작업을 수행 할 수 있습니다
하나의 레이블에 긴 문자열이 포함되어 두 번째 레이블이 줄 바꿈 될 가능성이 있습니다. repositionLabels
이라는 하위 클래스 인 UITableViewCell
하위 클래스에 메서드를 추가하거나 각 레이블 텍스트의 높이를 알면이 작업을 수행 할 수 있습니다.
불행히도, 이것은 이것이 세포의 높이를 계산하는 유일한 방법이라고 생각합니다. 이것을 참조하십시오 S.O. 추가 정보를 원하시면 게시 : 답장을
IOS: dynamic height with a custom uitableviewcell
모델 개체가 뷰와 관련된 값을 반환해야한다고 생각하지 않습니다. 나는 그 코드를 컨트롤러로 옮길 것이다. –
예. 너 아마 맞을거야. – Aaron