2015-04-21 4 views
0

У меня есть TextView в UITableViewCell, и я хочу, чтобы мой рост TableViewCell автоматически соответствовал высоте TextView.TableView Cell Auto Height

я работал какой-то код, но он отображается на IOS только 8, я хочу это может действие на IOS 7.

Пожалуйста, помогите мне!

Спасибо всем.

Вот изображение моего кода, оно работает на IOS 8 очень хорошо.

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    NSString *messageText = [NSString stringWithFormat:@"%@", [DicMessagesData objectForKey:@"ContentMessage"]]; 

    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f); 

    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 

    CGRect textRect = [messageText boundingRectWithSize:constraint options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSParagraphStyleAttributeName: paragraphStyle.copy} context:nil]; 

    return textRect.size.height + 30; 

} 

ответ

0

вы можете использовать этот код:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    NSString *text = @"your text"; 
    CGSize maximumLabelSize = CGSizeMake(CELL_CONTENT_WIDTH, 9999); 

    UITextField *textField = [[UITextField alloc] init]; 
    textField.font = [UIFont systemFontOfSize:18]; 
    textField.text = text; 
    CGSize expectSize = [textField sizeThatFits:maximumTXTSize]; 
    return expectSize.height + 40; 
} 
1

лучший способ я нашел:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    NSString *text = @"your text"; 
    CGSize maximumLabelSize = CGSizeMake(CELL_CONTENT_WIDTH, 9999); 

    UILabel *notesLabel = [[UILabel alloc] init]; 
    notesLabel.font = [UIFont systemFontOfSize:18]; 
    notesLabel.text = text; 
    notesLabel.numberOfLines = 0; 
    notesLabel.lineBreakMode = NSLineBreakByWordWrapping; 
    CGSize expectSize = [notesLabel sizeThatFits:maximumLabelSize]; 
    return expectSize.height + 40; 
} 
0

Попробуйте это. Оно работает. Это даст динамическую высоту для каждой ячейки таблицы, основанной на контенте.

- (CGFloat)heightForText:(NSString *)bodyText 
{ 
    NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:bodyText]; 
    CGFloat width = 278; 
    CGRect rect = [attrStr boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil]; 
    return rect.size.height+10; 

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    lblComment.numberOfLines = 0; 
    lblComment.lineBreakMode = NSLineBreakByWordWrapping; 
    CGFloat rowHeight = [self heightForText:[[allCommentsArr objectAtIndex:indexPath.row]objectForKey:@"comment"]]; 
    lblComment.frame = CGRectMake(25, 25, 278, rowHeight); 
    NSLog(@"rowHeight=%f", rowHeight); 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     CGFloat rowHgt=[self heightForText:[[allCommentsArr objectAtIndex:indexPath.row]objectForKey:@"comment"]]; 
     NSLog(@"rowHgt=%f", rowHgt); 
     return rowHgt+25; 
} 

enter image description here