25

我在 tableView 和 detailView 中使用相同的大图像。当一个图像显示在 tableView 中时,需要使 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。

4

7 回答 7

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
于 2011-04-27T23:05:01.247 回答
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),请确保正确清除缓存的缩略图。

于 2009-10-13T16:02:35.337 回答
4

我将我的包裹在 UIView 中并使用以下代码:

imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight;
[self addSubview:imageView];
imageView.frame = self.bounds;

(self 是包装 UIView,具有我想要的尺寸 - 我使用AsyncImageView)。

于 2009-09-09T15:07:31.363 回答
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];
}
于 2011-03-24T17:59:19.883 回答
-1

你也许可以用这个?

yourTableViewController.rowImage = [UIImage imageNamed:@"yourImage.png"];

和/或

cell.image = yourTableViewController.rowImage;

如果你的图像已经是 40x40,那么你不应该担心设置边界和东西......但是,我也是新手,所以,我不知道,没有玩过 Table View 行/细胞图像很多

希望这可以帮助。

于 2009-06-30T16:28:27.443 回答
-1

Try setting UIImageView.autoresizesSubviews and/or UIImageView.contentStretch.

于 2009-09-03T10:16:18.370 回答
-1

我能够使用界面生成器和 tableviewcell 来完成这项工作。您可以将图像视图的“模式”属性设置为“Aspect Fit”。我不确定如何以编程方式执行此操作。

于 2009-07-31T16:17:12.407 回答