Макет UITableView не обновляется до прокрутки - PullRequest
2 голосов
/ 10 мая 2011

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

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;

}

Ответы [ 2 ]

2 голосов
/ 10 мая 2011

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

2 голосов
/ 10 мая 2011

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


Обновление

  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]; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...