динамическая высота строки - PullRequest
0 голосов
/ 11 января 2011
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@""];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault      reuseIdentifier:CellIdentifier] autorelease];
}
//cell.backgroundView = [[[CustomCell alloc] init] autorelease];
cell.selectedBackgroundView = [[[CustomCell alloc] init] autorelease];

// At end of function, right before return cell:
cell.textLabel.backgroundColor = [UIColor clearColor];


// Configure the cell.
UILabel *myLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(-30, 3, 300, 22)];
UILabel *myLabel2 = [[UILabel alloc] initWithFrame:CGRectMake(10, 22, 310, 200)];
UILabel *myLabel3 = [[UILabel alloc] initWithFrame:CGRectMake(0, 170, 300, 20)];

Book *aBook = [appDelegate.books objectAtIndex:indexPath.row];


    myLabel1.text=aBook.title;
    myLabel2.text=aBook.description;
    myLabel3.text=aBook.pubDate;

    NSString *desc = aBook.description;
    if ([desc isEqualToString:nil]) {
        NSLog(@"nullll lll ");
    }


//myLabel2.textAlignment=UITextAlignmentCenter;              
myLabel2.numberOfLines=5;   
myLabel2.textColor=[UIColor blueColor];
myLabel2.lineBreakMode=UILineBreakModeWordWrap;
myLabel2.font=[UIFont systemFontOfSize:14];
myLabel3.numberOfLines=1;
myLabel1.numberOfLines=1;
myLabel1.textColor=[UIColor redColor];
myLabel1.font=[UIFont systemFontOfSize:20];
myLabel1.shadowColor=[UIColor redColor];
myLabel1.backgroundColor=[UIColor grayColor];
        [cell.contentView addSubview:myLabel1];
        [cell.contentView addSubview:myLabel2];
        [cell.contentView addSubview:myLabel3];

привет, ребята!У меня есть следующий код, я хочу отобразить это из XML-файла.теперь это рабочая, но статическая высота строки.если у файла xml нет данных, тогда он остается пустым.поэтому я хочу изменить высоту строки в соответствии с данными, которые я предоставляю, используя mylabel1,2,3.text

Ответы [ 3 ]

2 голосов
/ 11 января 2011

Как указано в протоколе UITableViewDelegate , вы хотите реализовать метод tableView:heightForRowAtIndexPath: в своем делегате. В этом методе вы получаете indexPath, поэтому вы можете повторить строку

 Book *aBook = [appDelegate.books objectAtIndex:indexPath.row];

Когда у вас есть книга, вы можете проверить ее свойства (выглядит как title, description и pubDate), а затем вместо добавления их в ячейку (что вы сделаете позже), вы вернете вычисленную высота ячейки на основе значений свойства.

1 голос
/ 12 августа 2011

Привет Есть одно решение, попробуйте метод NSString. напишите это Высота для ячейки

NSString *text1 = [arrOutline1 objectAtIndex:[indexPath row]];

CGSize constraint1 = CGSizeMake(CELL_CONTENT_WIDTH , 20000.0f);
CGSize size1 = [text1 sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint1 lineBreakMode:UILineBreakModeWordWrap];
CGFloat YPostion =MAX(size3.height, 44.0f);

cellHeight = cellHeight + YPostion + 20;;

return cellHeight ;
0 голосов
/ 11 января 2011

Если я правильно понимаю вопрос (и прошу прощения, если я не понимаю), то:

  1. Реализуйте tableView: heightForRowAtIndexPath: метод в вашем делегате tableView - получите его для вычисления и возврата подходящей высоты для строки;
  2. Сконфигурируйте размеры (или просто удалите из суперпредставления) UILabelViews, которые вы добавляете в contentView. Вы делаете это в tableView: cellForRowAtIndexPath:
  3. Убедитесь, что вы перезагружаете таблицу или, что лучше, перезагружаете только те строки, которые изменились - это заставляет tableView снова извлекать высоту

Вот пример метода tableView: heightForRowAtIndexPath для одной таблицы разделов, которая динамически изменяет высоту строки ячейки в зависимости от объема отображаемого текста в абзаце.

- (CGFloat) tableView: tableView heightForRowAtIndexPath: indexPath;
{   
    CGFloat rowHeight = [self rowHeight:[[self paragraphs] objectAtIndex: [indexPath row]];
    return (rowHeight + EI_CELL_MARGIN);
}

А затем фрагмент из tableView: cellForRowAtIndexPath: метод.

NSString* cellText = [[self paragraphs] objectAtIndex: [indexPath row];
[[cell paragraphController] setText: cellText];
[[cell paragraphController] adjustFrameToTextSize];

(Как и в этом коде, для удобства я подклассифицировал UITableViewCell. 'ParaController' - это просто ViewController с представлением, добавленным к представлению содержимого ячейки. Метод AdjustFrameToTextSize сбрасывает рамку представления в зависимости от размера содержимого для отображения.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...