2009-08-05 2 views
9

Кажется, я не могу получить текст, на самом деле охватывающий несколько строк. Высота выглядит правильно. Что мне не хватает?Как создать UITableViewCell с переменным размером?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"StatusCell"] autorelease]; 

    CGRect frame = cell.contentView.bounds; 
    UILabel *myLabel = [[UILabel alloc] initWithFrame:frame]; 
    myLabel.text = [[person.updates objectAtIndex:indexPath.row] valueForKey:@"text"]; 
    [cell.contentView addSubview:myLabel]; 

    [myLabel release]; 

    return cell; 
} 

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

    NSString *text = [[person.updates objectAtIndex:indexPath.row] valueForKey:@"text"]; 
    UIFont *font = [UIFont systemFontOfSize:[UIFont systemFontSize]]; 
    CGSize withinSize = CGSizeMake(tableView.frame.size.width, 1000); 
    CGSize size = [text sizeWithFont:font constrainedToSize:withinSize lineBreakMode:UILineBreakModeWordWrap]; 

    return size.height + 20;  
} 

Кроме того, что мне не хватает, что делает ярлыки длиннее, чем ячейка таблицы? alt text http://i31.tinypic.com/15chnjd.gif

ответ

15

Tweetero приведен пример этого в MessageListController.m. Код там делает следующий экран:

http://ec.mashable.com/wp-content/uploads/2009/04/imageshackscreen.jpg

(Pic берется из Mashable).

Основной план реализации:

  1. При построении UITableViewCell, создать и добавить UILabel как подвид в порядке, показанном на tableviewCellWithReuseIdentifier:. Посмотрите на создание метки TEXT_TAG.

  2. при обогащении UITableViewCell с видом, убедитесь, что метка формата должным образом, как это делается в configureCell:forIndexPath, так же обратите внимание на этикетки тега TEXT_TAG.

  3. Верните соответствующую высоту для каждой ячейки, как это сделано в tableView:heightForRowAtIndexPath.

+0

Это замечательно. Благодарю. –

2
myLabel.numberOfLines = 2; 

Проверить docs для полной информации о том, как использовать это свойство.

+0

проблема заключается в том, что она не всегда будет определенное количество, она будет меняться для каждой строки – Jason

+0

Свойство numberOfLines устанавливает ** ** максимальное количество строк. Установите его на высокое значение. (И, как сказал Роб, проверьте документы.) –

+2

Вам также нужно установить myLabel.lineBrakeMode в UILineBreakModeWordWrap. –

0
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return theSizeYouWantYourCellToBe; 
} 
Смежные вопросы