iOS – UITableViewCell图像调整/resize

我创build了一个表格视图,并用文本填充其单元格。 我想要做的是添加一个图像的单元格,但最新发生的是图像是整个单元格,它看起来不好…

这是我在做什么: cell.imageView.image = [UIImage imageNamed:@"test2.jpeg"];

这就是它的样子: 在这里输入图像说明

我试图让它看起来像是: 在这里输入图像说明

我如何调整表格视图单元格的图像,以获得所需的结果?

更新

这是我已经尝试在下面的答案build议:

 cell.imageView.frame = CGRectMake(0.0f, 0.0f, 30.0f, 30.0f); cell.imageView.layer.cornerRadius = 8.0; cell.imageView.contentMode = UIViewContentModeScaleAspectFit; cell.imageView.layer.masksToBounds = YES; cell.imageView.image = [UIImage imageNamed:@"test2.jpeg"]; 

但仍然是我得到的输出是:

在这里输入图像说明

更新2.0

我曾尝试过其他一些方法:

 UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(30, 30, 30, 30)]; imageView.backgroundColor = [UIColor clearColor]; [imageView.layer setCornerRadius:8.0f]; [imageView.layer setMasksToBounds:YES]; [imageView setImage:[UIImage imageNamed:@"test2.jpeg"]]; [cell.contentView addSubview:imageView]; 

但现在我得到这个: 在这里输入图像说明

首先,您需要将单元格的imageView设置为您想要的最大尺寸。 然后通过Interface Builder或通过代码确保您拥有正确的内容模式:

 cell.imageView.contentMode = UIViewContentModeScaleAspectFit; 

基本上使用这种模式,它会尽量适合你为图像创build的空间,但它会保持高宽比。

jackson张贴了一个很好的图片,显示了这里的内容模式

在这里输入图像说明

对于angular落你将需要QuartzCore,你可以用这个代码来设置它:

 #import <QuartzCore/QuartzCore.h> ... cell.imageView.layer.cornerRadius = 4; cell.imageView.layer.masksToBounds = YES; 

UPDATE

如果你的imageView不是一个sockets,你最好自己添加一个imageView到单元格。 你可以(也应该)通过storyboard / xib来做到这一点。 本教程可能会帮助你 ,虽然有很多在互联网上。 这个stackoverflow问题给出了这个问题的其他解决scheme。

我花了最后几个小时弄清楚如何做到这一点,所以我会分享我发现的。 Update 2.0中的代码是一个好的开始:

 UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(30, 30, 30, 30)]; imageView.backgroundColor = [UIColor clearColor]; [imageView.layer setCornerRadius:8.0f]; [imageView.layer setMasksToBounds:YES]; [imageView setImage:[UIImage imageNamed:@"test2.jpeg"]]; [cell.contentView addSubview:imageView]; 

你可以把第一行的数字搞乱,让图像出现在你需要的地方; 为了我的目的,我使用了(20, 5, 40, 40)

[cell.contentView addSubview:imageView]之前添加此行:

 [imageView setTag:99]; 

我们需要这个标签来识别我们刚添加的子视图。 如果每次重新加载单元格时都不删除图像,则图像将刚刚开始堆叠。 对于你的情况,这并没有太大的区别,因为它会继续使用相同的图像,所以它看起来是一样的。 但是,如果您的用户喜欢上下滚动,可能会遇到几百个或更多的图片加载问题。 如果你的单元格有不同的图像,他们将开始显示在彼此之上,如果它们大小不同,看起来真的很糟糕。 所以在你初始化*imageView之前,运行这个循环:

 for (UIImageView *subview in cell.contentView.subviews) { if (subview.tag == 99) { [subview removeFromSuperView]; } } 

有了这个代码,你的图像看起来应该和它在Update 2.0中一样,但是它应该运行得更好。 要移动文本,请使用cell.indentationLevelcell.indentationWidth 。 确保你的单元格样式设置为“基本”(看起来像你的),并在你返回你的单元格之前,使用

 cell.indentationWidth = 10; // The amount each indentation will move the text cell.indentationLevel = 7; // The number of times you indent the text 

所以这段代码会将文本移动10次以上7次。 你可以玩,直到你看起来正确; 这正是我在我的项目中使用的。 希望这可以帮助!

实现这个最好的方法是添加下面你调用cell.imageView.image

 cell.imageView.contentMode = UIViewContentModeScaleAspectFill; 

对于圆angular#import <QuartzCore/QuartzCore.h>

 cell.imageView.layer.cornerRadius = 8.0; 

你可以编辑图像本身? 尝试按照您想要的尺寸编辑图像并手动四舍五入。 然后打电话

  cell.imageView.image = [UIImage imageNamed:@"test3.jpeg"];