2010-11-08 105 views
8

我有一个16x16像素的图像,我想在UIImageView中显示。到目前为止,没有问题,但16x16有点小,所以我想调整图像视图的大小为32x32,从而也扩大了图像。 但是我无法让它工作,无论我尝试什么,它总是以16x16显示图像。我搜索了很多,并在Stack Overflow上找到了很多片段,但它仍然不起作用。 这是到目前为止我的代码:在UITableViewCell中调整UIImageView的大小

[[cell.imageView layer] setMagnificationFilter:kCAFilterNearest]; 
[cell.imageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; 
[cell.imageView setClipsToBounds:NO]; 
[cell.imageView setFrame:CGRectMake(0, 0, 32, 32)]; 
[cell.imageView setBounds:CGRectMake(0, 0, 32, 32)]; 
[cell.imageView setImage:image]; 

我不希望创建一个新的32×32像素的图像,因为我已经有旧设备上的一些内存问题,并创建两个图像而不是仅仅一个貌似很对我来说不好的方法(图像可以完美缩放,并且它们是否会失去质量并不重要)。

回答

30

我已经成功地使用CGAffineTransformMakeScale!

cell.imageView.image = cellImage; 
//self.rowWidth is the desired Width 
//self.rowHeight is the desired height 
CGFloat widthScale = self.rowWidth/cellImage.size.width; 
CGFloat heightScale = self.rowHeight/cellImage.size.height; 
//this line will do it! 
cell.imageView.transform = CGAffineTransformMakeScale(widthScale, heightScale); 
+0

如果您不想继承UITableViewCell,这是一个很好的方法,尽管可以使用tape-tape-y解决方案。 – jdc

+0

什么是cellImage.size.width?我正在使用initWithStyle方法 – Dejell

+0

cellImage是一个用于计算宽度和高度的临时UIImageView。 – Ahmed

4

我认为你需要设置contentMode:

cell.imageView.contentMode = UIViewContentModeScaleAspectFit; 

在背景:

UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"slashdot" ofType:@"png"]]; 
imageView = [[UIImageView alloc] initWithImage:image]; 
[imageView setBackgroundColor:[UIColor greenColor]]; 
[imageView setFrame:CGRectMake(x,y,32,32)]; 
imageView.contentMode = UIViewContentModeScaleAspectFit;  
[self.view addSubview:imageView]; 

注:我已经设置背景颜色,所以你可以调试的屏幕上的边界的UIImageView。 xy也是任意的整数坐标。

+0

还不行 – JustSid

+0

感谢您的更新,但它仍然无法正常工作。如果像我这样创建一个UIImageView,一切正常,但UITableViewCell中的UIImageView行为不同。我还用另一种背景色测试了它,以验证视图本身仍然具有16x16的帧。 – JustSid

+0

好吧,无论如何,看起来像一个UITableViewCell更新框架,无论我做什么。我现在自己创建标签和UIImageView,并将它们添加到单元格的contentView中。 – JustSid

1

使用CGAffineTransformMakeScele作为@ahmed说是有效的,似乎并不是鸭子类型的解决方案!例如,如果你有一个大的图像并把它放到一个UITableViewCell中(比如图像的大小是表格单元格的两倍,如果你按0.9来缩放,你就看不到任何结果。小于0.5(因为0.5 * 2.0 = 1.0就是单元格的大小)因此,看起来在api里面,苹果公司正在做这件事

1

你需要重写layoutSubviews方法。基于单元格高度大小ImageView的。

-(void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    self.imageView.frame = CGRectMake(self.imageView.frame.origin.x, 
             self.imageView.frame.origin.y, 
             MY_ICON_SIZE, 
             MY_ICON_SIZE); 
} 

你可能要重新计算的由来,以及因此它的垂直居中。