UITableViewCell的imageView适合40x40

时间:2009-06-28 18:47:27

标签: objective-c iphone uitableview uiimageview

我在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,内置“预定义样式中的单元格对象”。

7 个答案:

答案 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