Изменение высоты ячейки в табличном представлении Цель C - PullRequest
4 голосов
/ 01 июня 2009

Я хочу изменить высоту своей ячейки в зависимости от отображаемого в ней текста. Текст будет меняться, и я в основном хочу, чтобы ячейки меняли размер. Вот что у меня есть:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DefaultCell1"];
    CGRect cellRectangle;
    if (cell == nil) {

    cellRectangle = CGRectMake(0.0, 0.0, 300, 110);
    cell = [[[UITableViewCell alloc] initWithFrame:cellRectangle reuseIdentifier:@"DefaultCell1"] autorelease];
    }

    UILabel *label;
    cellRectangle = CGRectMake(10, (40 - 20) / 2.0, 280, 110);

    //Initialize the label with the rectangle.
    label = [[UILabel alloc] initWithFrame:cellRectangle];
    label.lineBreakMode = UILineBreakModeWordWrap;
    label.numberOfLines = 20;

    label.font = [UIFont fontWithName:@"Helvetica" size:11.0];
    label.text = [[self.person.statusMessages objectAtIndex:indexPath.row]   valueForKey:@"text"];
    CGFloat height = [label.text sizeWithFont:label.font].height;

    //So right here is where I think I need to do something with height and 
    //see it to something tied to he cell

    [cell.contentView addSubview:label];

    [label release];

    return cell;
}

Ответы [ 2 ]

8 голосов
/ 01 июня 2009

Вы не должны устанавливать высоту в методе cellForRowAtIndexPath. есть еще один метод UITableViewDatasource с именем tableView: heightForRowAtIndexPath: который вы должны реализовать, чтобы получить высоту ячейки. Будьте осторожны, используя это, хотя; вы не должны получить ячейку по этому пути индекса в этом методе; если вы это сделаете, вы построите бесконечный рекурсивный цикл.

Редактировать: будет ясно; вам нужно вычислить высоту ячейки, основываясь исключительно на ее содержимом, а не на самой ячейке.

Кроме того, в вашем коде, где вы создаете ячейку, вы можете просто передать CGRectZero аргументу frame; если вы это сделаете, табличное представление вычислит сам фрейм ячейки (а также, если я правильно помню, передача в фрейме устарела в OS 3.0).

3 голосов
/ 12 мая 2011

Если все строки имеют одинаковую высоту, что, на мой взгляд, верно в вашем случае, вы можете установить RowHeight в вашем контроллере табличного представления.

- (id)initWithStyle:(UITableViewStyle)style {
    // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization.
        NSLog(@"%s", __FUNCTION__);
        [self.tableView setRowHeight:110];
    }
    return self;
}

Ширина строки может контролироваться шириной суперпредставления таблицы

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