我在tableView和detailView中使用相同的大图像。 当tableView中显示imags时,需要使imageView填充40x40,但是在半个屏幕上拉伸。我玩了几个属性,但没有积极的结果:
[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,内置“预定义样式中的单元格对象”。
答案 0 :(得分:32)
我将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
答案 1 :(得分:12)
我缓存了缩略图版本,因为使用大规模缩小的大图像会占用太多内存。
这是我的缩略图代码:
- (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)。
答案 2 :(得分:4)
我将自己包裹在UIView中并使用此代码:
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight;
[self addSubview:imageView];
imageView.frame = self.bounds;
(self是包装器UIView,带有我想要的尺寸 - 我使用AsyncImageView)。
答案 3 :(得分:2)
我认为Ben Lachman建议提前生成缩略图而不是动态,因此我调整了他的代码,因此它可以处理整个数组并使其更具可移植性(没有硬编码的属性名称)。
- (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];
}
答案 4 :(得分:-1)
您可以使用它吗?
yourTableViewController.rowImage = [UIImage imageNamed:@"yourImage.png"];
和/或
cell.image = yourTableViewController.rowImage;
如果你的图像已经是40x40,那么你不必担心设置边界和东西...但是,我也是新手,所以,我不知道,没有玩过表格查看行/单元格图像
希望这会有所帮助。
答案 5 :(得分:-1)
我能够使用界面构建器和tableviewcell来完成这项工作。您可以将图像视图的“模式”属性设置为“Aspect Fit”。我不确定如何以编程方式执行此操作。
答案 6 :(得分:-1)
尝试设置UIImageView.autoresizesSubviews
和/或UIImageView.contentStretch
。