2011-09-02 1 views
2

안녕하세요,UITableViewCell 동적 높이 :/

NIB 파일로 UITableViewCell을 만들었습니다. 트위터를 포함 할 레이블이 1 개 있습니다. 따라서 동적 인 높이가되어야합니다. 짹 짹짹 레이블 아래에 맞아야하는 timeAgo 레이블도 있습니다.

크기가 작은 프레임을 사용하려고하지만 완벽한 솔루션을 얻을 수 없습니다 .. drawrect 메서드에서 UITableViewCell 파일에서이 작업을 수행합니다.

self.tweet.lineBreakMode = UILineBreakModeWordWrap; 
self.tweet.numberOfLines = 0; 
self.tweet.font = [UIFont fontWithName:@"Arial" size:13.0f]; 
[self.tweet sizeToFit]; 

CGFloat tweetHeight = self.tweet.frame.size.height; 

self.timeAgo.lineBreakMode = UILineBreakModeWordWrap; 
self.timeAgo.numberOfLines = 0; 
self.timeAgo.font = [UIFont fontWithName:@"Arial" size:11.0f]; 
[self.timeAgo sizeToFit]; 

CGFloat timeAgoHeight = self.timeAgo.frame.size.height; 

self.timeAgo.frame = CGRectMake(88, tweetHeight, 100, timeAgoHeight + 10.0f); 

나는 또한 튜토리얼에서 찾은 stringhelper를 시도했다.

: 내가 다른 셀 스타일을 사용하기 때문에

- (CGFloat)RAD_textHeightForSystemFontOfSize:(CGFloat)size { 

내 HeightForRow 방법은 이미 다릅니다. 현재 각 셀 스타일에 대해 어려운 값을 반환하지만 그 또한 셀 높이로 변경해야합니다.

여러분이 좋은 방향으로 나를 가르키 길 바랍니다. 당신은 단지 크기를 설정할 수있는 것보다

감사합니다,

  • 롤프

답변

7

, http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/

트릭은 라벨이 세포의 크기와 함께 성장하는 것입니다,이 자습서를 참조하십시오 세포와 세포는 함께 성장할 것입니다.

시간 레이블을 셀의 맨 아래에 맞추려면 시간 레이블을 설정하십시오.

는 IB를 통해 0으로 트윗의 numberOfLines을 설정, 다시 모든 그리기 코드를 이동 만 다음을 구현 :

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    id item = [self.item objectAtIndex:indexpath.row]; 

    CGFloat height = 85.0f; 

    if ([item isKindOfClass:[Tweet class]]) { 
     Tweet *tweet = (Tweet *)item; 
     CGSize titleSize = [tweet.tweet sizeWithFont:[UIFont fontWithName:@"Arial" size:13.0f] constrainedToSize:CGSizeMake(260.0f, MAXFLOAT)]; 

     // adde the 24 pixels to get the height plus the time ago label. 
     height = titleSize.height + 24.0f; 

    } else if([item isKinfOfClass:[SC_Release class]]) { 
     height = 65.0f; 
    } 

    return height; 
} 
+0

흠,이 아니 좋은 기압 = 페이지에 http : // CL. ly/1Y00411b0F0N0h2R2G2z/http://cl.ly/3t0g3L1r1k3h0M163m2i –

+0

편집 해 주셔서 감사합니다! 그러나 문제는 크기가 조정되지 않은 짹짹 텍스트가 포함 된 레이블입니다. http://cl.ly/2t2Q2P0p3g2v0Y0Y2d2u –

+0

글쎄,하지만 사용자 이름 때문에 y 오프셋과 일치시키기 위해 24 픽셀을 늘려야한다고 생각합니다. 또한 셀의 높이가 이미지의 높이 이상인지 확인하십시오. 또한 CGSize의 16.0f가 너비 레이블인지 확인하십시오 (260.0f는 예제입니다). – rckoenes

3
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *string = [tweetsArray indexPath.row]; 
    CGSize labelSize = [string sizeWithFont:[UIFont fontWithName:@"Verdana" size:17.0] 
                constrainedToSize:CGSizeMake(280.0f, MAXFLOAT) 
                 lineBreakMode:UILineBreakModeWordWrap]; 
    return labelSize.height + 20; 
} 
+0

이 접근법은 꽤 똑같습니다. 그러나 임의의 다른 배열과 대화하는 대신 문자 그대로'[self tableView : tableView cellForRowAtIndexPath : indexPath]'로 셀을 가져 와서 셀의'textLabel.text' 속성에서 텍스트 값을 가져옵니다. –