Изменение изображения в 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];
}
Ответы
Ответ 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;
}