Подтвердить что ты не робот

Изменение изображения в UItableViewCell при выборе

Я загружаю список пользователей facebook с помощью webcache, и он работает фантастически. Пока вы не выберите одну из ячеек, то, похоже, либо изменит режим содержимого, либо, скорее, изменит размер кадра uiimageview, но и на основе фактического размера изображения. для ясности здесь приведены некоторые экраны

здесь загружается http://img.photobucket.com/albums/v246/homojedi/Screenshot20120727114807.png

и при выборе некоторых изображений, как вы можете видеть, они, похоже, переходят к их первоначальному аспекту. http://img.photobucket.com/albums/v246/homojedi/Screenshot20120727114827.png

как и ожидалось, если я прокручу их с экрана и вернусь к ним, они будут восстановлены до того, что они были в начале.

Это озадачивает. Единственное, что я не пытался, - это подклассификация uitableView и настройка его подвариантности. что я могу сделать?

EDIT: запрошенный код

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // typically you need know which item the user has selected.
    // this method allows you to keep track of the selection
    _indexPath = indexPath;

    [_indexPath retain];
}
4b9b3361

Ответ 1

У меня есть такая же проблема, как и вы, и я исправляю

проблема связана с тем, что вы назвали свой образ ImageView "imageView"

Я не знаю, почему

если вы измените свое имя изображения, например "m_imageView"

проблема исправлена ​​

Все об именах!

Ответ 2

Я столкнулся с этой проблемой, но у меня нет свойства imageView внутри моего настраиваемого UITableViewCell.

На самом деле я сделал глупую ошибку подключения дополнительного IBOutlet от моего объекта imageView до свойства imageView по умолчанию для UITableViewCell. Это потому, что я изначально назвал свое изображение imageView, но потом я изменил его и забыл о выходе.

extra outlet

После извлечения розетки все работает нормально.

Ответ 3

На всякий случай кто-то другой, как и я, наткнулся на эту проблему, где не работал выше.

Я тоже назвал мой UIImageView: imageView. Но, по какой-то причине даже после переименования проблема не устранена. Я пробовал все, что мог придумать, Reset Simulator, Clean Project, добавив удаление ограничений....

Как оказалось, просто удалив UIImageView из раскадровки и перетащив новый.

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

Ответ 4

У меня была эта проблема, и я решил ее!!!

Проверьте, чтобы убедиться, что вы синтезировали свойство imageView в своем пользовательском TableViewCell.

Я забыл синтезировать свойство (в результате не получается getter/setter для IBOutlet).

Эта тема старая, но надеюсь, что это поможет кому-то еще!

Ответ 5

// reason for this problem is UITableView cell imageview initially has a default size later on it resize it self on select so following cab be a solution for this: (Using AFNetworking to set image/ You can adjust accordingly)

            __weak UItableViewCell *cellTemp = cell;

            [cell.imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:strURL]]
                                  placeholderImage:[UIImage imageNamed:@"placeholder"]
        success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
            {
                cellTemp.imageView.image = image;

                CGRect frameRect = cellTemp.imageView.frame;
                frameRect.origin.y = (cellTemp.frame.size.height - image.size.height)/2;
                frameRect.size.width = image.size.width;
                frameRect.size.height = image.size.height;
                cellTemp.imageView.frame = frameRect;

                [cellTemp layoutSubviews]; 
    // this will fit your cell label

            }
        failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
            {

            }];

Ответ 6

Я считаю, что ваша проблема связана с UIImageView. Вы должны установить изображение один раз - cell.imageView.image = myImage. Не устанавливайте выделенное изображение. Установите ContentMode, чтобы сохранить соотношение сторон вашего изображения: cell.imageView.contentMode = UIViewContentModeScaleAspectFit;, и убедитесь, что значение contentStretch rect равно 0,0,1,1 (по умолчанию).

Возможно, tableView изменит contentMode UIImageView или его фрейм, когда он будет выбран (кто знает причины, почему). Я бы добавил NSLogs как для willSelectRowAtIndexPath, так и для didSelectRowAtIndexPath, показывая ту же информацию: кадр imageView, значение contentMode (как целое число) и т.д. Как-то одно или несколько из этих значений меняются при выборе.

Ответ 7

Добавление ответов на вопрос об именовании:

Как уже было сказано, проблема с представлением изображения сохраняется даже после переименования. Но не требуется удалять UIImageView из вашего xib или раскадровки. Вы можете просто ctrl-щелкнуть изображение и удалить соединение с свойством imageView, которое все еще существует.

Причина, по которой существует связь с imageView, по-видимому, заключается в том, что свойство imageView остается доступным после удаления его в коде. Он все еще существует, потому что он унаследован от UITableViewCell.

Один последний намек, который звучит глупо, но мне потребовалось несколько минут, чтобы понять: Очевидно, что весь код с использованием имени свойства imageView будет по-прежнему работать, но приведет к странному поведению! Поэтому дважды проверьте, не осталось ли кода с использованием старого имени свойства.

Ответ 8

У меня была такая же проблема, и даже после всех предыдущих ответов никто из них не выработал. Позже я узнал, что UITableViewController имел несколько неиспользуемых Outlets, поэтому удаление неиспользуемых Outlets устранило проблему.

Ответ 9

В соответствии с просьбой Себастьяна-Luczak я придумал решение для изменения размера, но теперь есть несоответствие качества изображения, оно получает более высокое разрешение, только когда вы прикасаетесь к нему, странно, но не так плохо или примечательно, так или иначе, вот код.

N.B я Использование SDWebImage для асинхронной загрузки изображений

[cell.imageView setImageWithURL:[NSURL URLWithString:path] placeholderImage:[UIImage imageNamed:@"Icon.png"]success:^(UIImage *image) 
 {
     cell.imageView.image = [image resizeImage:image newSize:CGSizeMake(38, 38)];

 } failure:^(NSError *error) 
 {

 }];

Ответ 10

//Если вы подклассифицируете UITableViewCell, вы можете избавиться от этой проблемы.

- (void)layoutSubviews {

    [super layoutSubviews];
    self.imageView.bounds = CGRectMake(10,5,65,65);
    self.imageView.frame = CGRectMake(10,5,65,65);
    self.imageView.contentMode = UIViewContentModeScaleAspectFit;

}