Почему этот UIImage исчезает из UITableViewCell при повороте в альбомную ориентацию?

Я пытаюсь настроить UITableViewCell, который может иметь изображение в правом верхнем углу.

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

Вот код:

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

        UIImage *cornerImage = [UIImage imageNamed:@"star_corner.png"];
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(cell.contentView.bounds.size.width - cornerImage.size.width,
                                                                               0,
                                                                               cornerImage.size.width,
                                                                               cornerImage.size.height)];
        imageView.tag = kCornerImageViewTag;
        [cell.contentView addSubview:imageView];
        [imageView release];
    }

    UIImageView *theView = (UIImageView *)[cell.contentView viewWithTag:kCornerImageViewTag];
    [theView setImage: [UIImage imageNamed:@"star_corner.png"]];

    cell.textLabel.text = @"the text label";
    return cell;
}

Интересно, что если я закомментирую строку «cell.textLabel.text =", изображение будет отображаться в альбомной ориентации... хотя оно не сдвинется вправо.

Если есть что-то еще, что я делаю неправильно здесь, пожалуйста, дайте мне знать.

Спасибо заранее за любую помощь.


person Jim Rhoades    schedule 15.06.2010    source источник


Ответы (2)


Я понял это. Решение состояло в том, чтобы создать два UIImageView... один для изображения угла звезды и один для фонового изображения ячейки.

Я добавил звездный угол UIImageView в качестве подпредставления к фоновому изображению UIImageView, а затем назначил его для cell.backgroundView.

Звезда UIImageView правильно позиционирует себя с помощью:

starImageView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;

И поскольку все это присваивается cell.backgroundView (вместо cell.contentView), на него не влияет кнопка удаления ячейки или элементы управления переупорядочением.

person Jim Rhoades    schedule 20.08.2010

Ваш UIViewController должен реагировать на didRotateFromInterfaceOrientation.

В этом методе вы можете перебирать ячейки, получать UIImageView с помощью [cell viewWithTag] и изменять свойство фрейма в соответствии с новыми размерами ячейки (cell.contentView.bounds).

Удачи!

person rjobidon    schedule 18.08.2010
comment
Спасибо за ответ. На самом деле я отвечаю на didRotateFromInterfaceOrientation. С момента публикации этого вопроса пару месяцев назад я понял, что простым решением было просто добавить: imageView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; Это правильно позиционирует изображение в ландшафте. Однако у меня это все равно не сработает, поскольку нажатие кнопки «Удалить» для ячейки приводит к перемещению изображения. Из дальнейших исследований кажется, что мне нужно создать подкласс UITableViewCell и сделать там свой макет, поэтому я изучаю, как это сделать сейчас. - person Jim Rhoades; 18.08.2010