UITableViewCell imageView подходит для 40x40
Я использую те же большие изображения в tableView и detailView.
Необходимо сделать imageView заполненным 40x40, когда imags отображается в tableView, но растягивается на половину экрана. Я играл с несколькими свойствами, но не имел положительного результата:
[cell.imageView setBounds:CGRectMake(0, 0, 50, 50)];
[cell.imageView setClipsToBounds:NO];
[cell.imageView setFrame:CGRectMake(0, 0, 50, 50)];
[cell.imageView setContentMode:UIViewContentModeScaleAspectFill];
Я использую SDK 3.0 со сборкой в "Объекты ячейки в предопределенных стилях".
Ответы
Ответ 1
Я ставлю код Ben как расширение в файле NS-Extensions, чтобы я мог показать любому изображению, чтобы сделать его миниатюру, например:
UIImage *bigImage = [UIImage imageNamed:@"yourImage.png"];
UIImage *thumb = [bigImage makeThumbnailOfSize:CGSizeMake(50,50)];
Вот .h файл:
@interface UIImage (PhoenixMaster)
- (UIImage *) makeThumbnailOfSize:(CGSize)size;
@end
а затем в файле NS-Extensions.m:
@implementation UIImage (PhoenixMaster)
- (UIImage *) makeThumbnailOfSize:(CGSize)size
{
UIGraphicsBeginImageContextWithOptions(size, NO, UIScreen.mainScreen.scale);
// draw scaled image into thumbnail context
[self drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *newThumbnail = UIGraphicsGetImageFromCurrentImageContext();
// pop the context
UIGraphicsEndImageContext();
if(newThumbnail == nil)
NSLog(@"could not scale image");
return newThumbnail;
}
@end
Ответ 2
Я кэширую миниатюру, так как использование больших изображений, уменьшенных на лету, использует слишком много памяти.
Вот мой миниатюрный код:
- (UIImage *)thumbnailOfSize:(CGSize)size {
if( self.previewThumbnail )
return self.previewThumbnail; // returned cached thumbnail
UIGraphicsBeginImageContext(size);
// draw scaled image into thumbnail context
[self.preview drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *newThumbnail = UIGraphicsGetImageFromCurrentImageContext();
// pop the context
UIGraphicsEndImageContext();
if(newThumbnail == nil)
NSLog(@"could not scale image");
self.previewThumbnail = newThumbnail;
return self.previewThumbnail;
}
Просто убедитесь, что вы правильно очистили кеш файл, если вы изменили исходное изображение (self.preview в моем случае).
Ответ 3
У меня есть моя оболочка в UIView и используйте этот код:
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight;
[self addSubview:imageView];
imageView.frame = self.bounds;
(self - это оболочка UIView, с размерами, которые я хочу - я использую AsyncImageView).
Ответ 4
Я думал, что предложение Бена Лахмана по созданию эскизов заранее, а не на лету, было умным, поэтому я адаптировал его код, чтобы он мог обрабатывать целый массив и сделать его более портативным (без жестко закодированных имен свойств).
- (NSArray *)arrayOfThumbnailsOfSize:(CGSize)size fromArray:(NSArray*)original {
NSMutableArray *temp = [NSMutableArray arrayWithCapacity:[original count]];
for(UIImage *image in original){
UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0,0,size.width,size.height)];
UIImage *thumb = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[temp addObject:thumb];
}
return [NSArray arrayWithArray:temp];
}
Ответ 5
вы могли бы использовать это?
yourTableViewController.rowImage = [UIImage imageNamed:@"yourImage.png"];
и/или
cell.image = yourTableViewController.rowImage;
и если ваши изображения уже 40x40, вам не придется беспокоиться о настройке границ и прочее... но я тоже новичок в этом, поэтому, я бы не знал, не играл с Таблица Просмотр изображений строк/ячеек значительно
надеюсь, что это поможет.
Ответ 6
Я смог выполнить эту работу с помощью конструктора интерфейсов и tableviewcell. Вы можете установить свойства "Режим" для изображения на "Аспект Fit". Я не уверен, как это сделать программно.
Ответ 7
Попробуйте установить UIImageView.autoresizesSubviews
и/или UIImageView.contentStretch
.