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.indentationLevel
和cell.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"];