2011-05-10 4 views
2

Я создал UISplitViewApplication в качестве моего нового проекта. В режиме potrait у меня есть кнопка, при нажатии которой выпадаете UITableView. Это выглядит как следующее:UITableView layout не обновляется до прокрутки

enter image description here

Когда я нажал на одну из строк, это UITableView увольняемым. Затем, когда я снова нажмите на кнопку групп, макет UITableView, представленный в настоящее время все неаккуратно:

enter image description here

Однако, когда я прокручивать TableView так, что некоторые из строк перезагружается снова, те, которые перезагруженные затем отформатированы в порядке. Почему это и как я могу это исправить?

Вот моя клетка для строки по индексу пути:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"MyCell"; 

    MyCell *cell = (ConvoreCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    //if (cell == nil) { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:nil options:nil]; 
     for (id currentObject in topLevelObjects){ 
      if ([currentObject isKindOfClass:[UITableViewCell class]]){ 
       cell = (MyCell *) currentObject; 
       break; 
      } 
     } 
     cell.delegate = self; 
    // } 


    if ([posts count] > 0){ 
     cell.star.hidden = YES; 

     [lazyImages addLazyImageForCell:cell withIndexPath:indexPath]; 
     cell.title.text = [[posts objectAtIndex:indexPath.row] message]; 

     cell.detailed.autoresizesSubviews = YES; 
     cell.detailed.text = [NSString stringWithFormat:@"%@", [[[posts objectAtIndex:indexPath.row] creator] username]]; 


     if ([[[posts objectAtIndex:indexPath.row] embeds] count] != 0){ 
      NSString * URL = [[[[posts objectAtIndex:indexPath.row] embeds] objectAtIndex:0] url]; 
      float height = [[(Embed *)[[[posts objectAtIndex:indexPath.row] embeds] objectAtIndex:0] height] floatValue]; 
      float width = [[(Embed *)[[[posts objectAtIndex:indexPath.row] embeds] objectAtIndex:0] width] floatValue]; 
      [cell.embed setFrame:CGRectMake(cell.detailed.frame.origin.x, cell.detailed.frame.origin.y + 15, width, height)]; 
      cell.embed.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:URL]]]; 
     } 

     if ([[[posts objectAtIndex:indexPath.row] stars] count] != 0){ 
      cell.star.hidden = NO; 
      cell.star_creator.text = [(Login *)[[[[posts objectAtIndex:indexPath.row] stars] objectAtIndex:0] user] username]; 
     } 

    } 
    return cell; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *cellText =[[posts objectAtIndex:indexPath.row] message]; 
    UIFont *cellFont = [UIFont fontWithName:@"Arial" size:14.0]; 
    CGSize constraintSize = CGSizeMake(600.0f, MAXFLOAT); 
    CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap]; 
    float height = 0.0; 

    if ([[[posts objectAtIndex:indexPath.row] embeds] count] != 0) 
     height = [[[[[posts objectAtIndex:indexPath.row] embeds] objectAtIndex:0] height] floatValue]; 

    if (labelSize.height + 20 + height < 48) 
     return 55; 
    else 
     return labelSize.height + height + 48; 

} 
+0

Ваши «UITableViewCells» имеют динамические высоты? –

+0

Да, он имеет динамическую высоту. Я загрузил этот код только сейчас – aherlambang

+0

, а также попытаюсь сделать «CellIdentifier» как мой (динамический). –

ответ

2

Повторно из предыдущего комментария: перезагружать видимые ячейки в viewWillAppear.

2

Я прошел через это раньше, в вашем CellForRowAtIndex делегатом и не проверить, если ячейка равен нулю просто продолжать идти.


Update

NSString *sIdentifier = [NSString stringWithFormat:@"MyIdentifier %i", indexPath.row]; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:sIdentifier]; 

    // don't check if(cell == nil) 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:sIdentifier] autorelease]; 
+0

хорошо, если вы не проверить, если это ноль или нет, как вы знаете, нужно ли вам чтобы создать один или не – aherlambang

+0

@aherlambangl. Я более чем счастлив обсудить это с вами **, но ** вы пробовали его сначала? –

+0

Да, у меня есть ... и все еще грязно ... Я просто удалил if-ячейку == nil и сохранил все, что находится внутри цикла. Я отредактировал мой пост выше, чтобы отразить код cellforrowatindexpath – aherlambang

Смежные вопросы