2013-05-09 6 views
0

셀 내용에 따라 행 높이를 조정해야하는 몇 가지 질문을 살펴 보았습니다. 하지만 제 경우에는 하나의 셀에 10 개의 레이블이 있고 각 레이블의 너비는 고정되어 있습니다. 레이블 너비에 맞지 않으면 레이블을 줄 바꿈해야합니다. 따라서 행 높이는 모든 10 레이블의 텍스트 내용에 따라 다릅니다. 즉, 주어진 텍스트에 대해 모든 레이블의 높이를 계산하고 모든 레이블 중에서 최대 높이를 행 높이로 가져와야 함을 의미합니다. 모든 행에 대해이 작업을 수행해야합니다. 이것은 나에게 불충분 한 해결책을 찾는다. 더 나은 해결책이 있습니까?UITableView 행의 높이 (셀 내용 기준)

감사합니다,

Jignesh

답변

1

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

+0

모델 개체가 뷰와 관련된 값을 반환해야한다고 생각하지 않습니다. 나는 그 코드를 컨트롤러로 옮길 것이다. –

+0

예. 너 아마 맞을거야. – Aaron

2

당신은 세포를 표시하기 전에 모든 높이를 계산해야합니다. 사용하여 각 행에 대해 그 반환 행 높이 후 :

[yourString sizeWithFont:constrainedToSize:lineBreakMode:] 
+0

안녕하세요 이고르, 감사합니다! 나는 그것을 알고 있지만 가능한 더 좋은 방법을 찾기 위해 노력하고 있었다. – iosDeveloper

+0

왜 한 셀에 10 개의 레이블이 필요한가요? 어쩌면 핵심 텍스트 대신 사용해야합니까? [Core-Text-Label] (https://github.com/newsme/Core-Text-Label)도 유용 할 수 있습니다. –

+0

iPad에서 gridview를 구현하고 있습니다. 따라서 10은 단지 예일 뿐이므로 어떤 수의 열이든지간에 셀의 레이블 수가 달라질 수 있습니다. – iosDeveloper