2010-07-02 11 views
0

빠른 질문. 셀에 포함 된 텍스트에 따라 셀 높이를 동적으로 설정하는 간단한 방법이 있습니까? 시나리오 : 두 섹션이 포함 된 그룹화 된 테이블보기. 섹션 1과 섹션 2에는 데이터베이스의 텍스트가 포함되어 있습니다 (길이가 다른 텍스트 포함).동적 셀 높이가있는 UITableView

나는 튜토리얼과 코드 스 니펫을 살펴 봤지만 아무 것도 도움이되지 않는다.

자습서 또는 더 나은 코딩 아이디어에 대한 조언이나 링크를 보내 주시면 감사하겠습니다.

감사합니다.

+0

누구입니까? 어떤 제안? – treasure

답변

3

여기에 답이 있습니다. (잘 작성하지 못했습니다.) 나는 문제가있어, 나를 미치게 만드는 데 도움이 될 것입니다. (경고 : 컨트롤이 무효 기능에 도달 함)

누군가가 도와 줄 수 있습니까?

여기 코드가 있습니다!

#pragma mark - 
#pragma mark UITableViewDelegate methods 
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 



    UITableViewCell *cell = [self newOrReusableCell]; 

    if (indexPath.section == A_SECTION) { 

    NSUInteger row = indexPath.row; 
    NSString *text = [_centerArray objectAtIndex:row]; 
    UILineBreakMode lineBreakMode = cell.textLabel.lineBreakMode; 

    CGFloat width = _tableView.contentSize.width - (kTableCellHPadding*2 + tableCellMargin*2); 
    UIFont* font = cell.textLabel.font; 
    CGSize size = [text sizeWithFont:font 
        constrainedToSize:CGSizeMake(width, CGFLOAT_MAX) 
         lineBreakMode:lineBreakMode]; 

    if (size.height > kMaxLabelHeight) { 
     size.height = kMaxLabelHeight; 
    } 

     return size.height + kTableCellVPadding*2; 
} 


    if (indexPath.section == B_SECTION) { 

     NSUInteger row = indexPath.row; 
     NSString *text = [_leftArray objectAtIndex:row]; 
     UILineBreakMode lineBreakMode = cell.textLabel.lineBreakMode; 

     CGFloat width = _tableView.contentSize.width - (kTableCellHPadding*2 + tableCellMargin*2); 
     UIFont* font = cell.textLabel.font; 
     CGSize size = [text sizeWithFont:font 
         constrainedToSize:CGSizeMake(width, CGFLOAT_MAX) 
          lineBreakMode:lineBreakMode]; 

     if (size.height > kMaxLabelHeight) { 
      size.height = kMaxLabelHeight; 
     } 

    return size.height + kTableCellVPadding*2; 
} 
}//i get the WARNING here!! 
+0

반환 값이있는 if 문 2 개가 있기 때문에 경고 메시지가 표시됩니다. 두 가지 if 문이 어떤 이유로 든 거짓이면 반환하지 않습니다. 마지막 경고가 나오기 전에 메서드의 맨 아래에 리턴 값을 넣음으로써이 경고를 수정할 수 있습니다. –