Изменение размера UITableViewCell до высоты UILabel динамически

Я хочу изменить размер ячейки в соответствии с высотой надписи и высотой надписи в соответствии с текстом. Или есть ли способ изменить размер ячейки в соответствии с текстом, введенным в UITextView?

Ответ 1

ЭТОТ МЕТОД УДАЛЯЕТСЯ С iOS 7.0.

Существует метод делегата UITableView, называемый heightForRowAtIndexPath, который вызывается перед созданием ячейки или таблицы.

Вы можете использовать переданный ему NSIndexPath для получения текста в определенной строке и использовать метод sizeWithFont из UIStringDrawing.h для вычисления CGSize для этой строки.

Например:

CGSize size = [text sizeWithFont:font
                   constrainedToSize:maximumLabelSize
                   lineBreakMode:UILineBreakModeWordWrap];

И, наконец, вы вернетесь size.height.

Ответ 2

- для iOS7 -

Исходя из этого ответа Джоша Веры... поместите это в heightForRowAtIndexPath.

У меня есть данные таблицы, хранящиеся в таблице данных NSArray *.

// set the desired width of the textbox that will be holding the adjusted text, (for clarity only, set as property or ivar)
CGFloat widthOfMyTexbox = 250.0;

-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //Get a reference to your string to base the cell size on.
    NSString *cellText = [self.tableData objectAtIndex:indexPath.row];
    //set the desired size of your textbox
    CGSize constraint = CGSizeMake(widthOfMyTextBox, MAXFLOAT);
    //set your text attribute dictionary
    NSDictionary *attributes = [NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:14.0] forKey:NSFontAttributeName];
    //get the size of the text box
    CGRect textsize = [cellText boundingRectWithSize:constraint options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];
    //calculate your size
    float textHeight = textsize.size.height +20;
    //I have mine set for a minimum size
    textHeight = (textHeight < 50.0) ? 50.0 : textHeight;

    return textHeight;
}

Я не тестировал его для iOS 7, но я считаю, что он тоже должен работать для этого.