sdwebimage: изображение в ячейке таблицы растягивается после первоначальной загрузки

Я использую SDWebImage в своем проекте iPhone и использую его для загрузки изображений в ячейку таблицы.

Исходное загруженное изображение 150*150. Мое изображение-заполнитель 32*32 (необходимый размер)

В первый раз, когда изображение загружается, sdwebimage отлично справляется с изменением размера загруженного изображения, чтобы оно соответствовало размеру изображения-заполнителя (32*32). Все хорошо.

Однако, когда я возвращаюсь назад, а затем возвращаюсь на ту же страницу, изображение растягивается и заполняет всю высоту cell.imageView. Это нормальное поведение?

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

EDIT: я обнаружил эту ссылку, где другой пользователь сталкивается с аналогичной проблемой (открытый вопрос). Пользователь также снял короткое видео на YouTube, чтобы объяснить проблему.

Мысли?


person Ravi    schedule 31.01.2012    source источник


Ответы (4)


попробуйте это для определенного размера в cellForRowAtIndexPath :

   UIImageView *addImage = [[UIImageView alloc] init];
   [addImage setImageWithURL:[NSURL URLWithString:yourCellImageURL] placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 
   [addImage setFrame:CGRectMake(7, 3, 78, 57)];
   [cell.contentView addSubview:addImage];
   [cell setIndentationLevel:8];
person mturhan55    schedule 06.03.2012

tldr: если в вашем пользовательском подклассе UITableViewCell есть @property IBOutlet UIImageView* с именем imageView, измените свое имя на другое (например, customImageView), и все будет работать правильно. Прочитайте остальную часть ответа, почему

Я вижу, что никто не ответил на этот вопрос, и я потратил целую неделю, пытаясь найти решение этой проблемы, так что вот что случилось со мной и как предотвратить это с вами (таким образом решив вашу проблему).

Я создал CustomTableViewCell, который расширяет UITableViewCell.

Я добавил @property (weak, nonatomic) IBOutlet UIImageView *imageView; в свою пользовательскую ячейку. Все вроде хорошо до сих пор, верно?

Но это не так.

UITableViewCell уже имеет свойство imageView. iOS 7 сначала использует ваше свойство, но затем, когда ячейка повторно используется, используется imageView UITableViewCell, поэтому игнорируются все ваши ограничения или ранее определенные фиксированные размеры.

iOS 8 всегда использует изображение из UITableViewCell. так что там проблема более очевидна. Предыдущие версии iOS также имели разную степень этой проблемы, обычно проявляя очень похожие симптомы.

Решение? Либо разберитесь со свойством UITableViewCell.imageView самостоятельно (добавьте код для разметки представления), либо создайте собственное свойство с другим именем, с помощью которого вы сможете добавлять ограничения (если вы используете автоматическую разметку). на раскадровках или xib.

person Velociround    schedule 14.10.2014
comment
Боже мой, вы не можете поверить, сколько здоровья вы дали мне своим ответом, я мог чувствовать себя либо глупо, либо благодарно, в любом случае, если бы не ваш ответ, я бы, вероятно, закончил что-то сложное, например, установить местоположение изображения в коде или что-то в этом роде. Благодаря тонну!! - person Alan Poggetti; 18.09.2015
comment
Угу.. то же самое. Это должно быть сгенерировано предупреждение. Грустно то, что я думаю, что только что сделал textLabel (тот же тип проблемы) две недели назад и поймал себя. - person Evan Anger; 09.12.2017

Попробуйте установить правильный режим содержимого UIImageView

person yebw    schedule 01.02.2012
comment
Спасибо за ответ. Не могли бы вы уточнить? Я попробовал UIViewContentModeScaleAspectFit, и это не дало никакого эффекта. У меня нет пользовательской ячейки таблицы. - person Ravi; 01.02.2012

если вы хотите изменить размер изображения в SDWebImage. использовать этот вызов.

// Here we use the new provided setImageWithURL: method to load the web image
[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
           placeholderImage:[UIImage imageNamed:@"placeholder.png"]
                  completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { /*here you can change size of image */ }];
person Saif    schedule 27.08.2013