如何为 UITableViews 裁剪 cell.imageview.image 中的图像?
Posted
技术标签:
【中文标题】如何为 UITableViews 裁剪 cell.imageview.image 中的图像?【英文标题】:How can I crop images in cell.imageview.image for UITableViews? 【发布时间】:2012-03-10 04:01:28 【问题描述】:我已经阅读了here、here 和 here 的相关信息 - 但我无法弄清楚。 我有一个 UITableView,它显示一个图像缩略图(宽度为 66 像素),但是当它显示在表格中时,图像不能很好地排列,这会使文本脱落并使事情看起来很粗糙:
这是我尝试将其限制在 cellForRowAtIndexPath 中的这些维度:
UIImage *largeImage = [UIImage imageWithContentsOfFile: uniquePath];
CGRect cropRect = CGRectMake(0, 0, 66, 49);
CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
cell.imageView.image = [UIImage imageWithCGImage: imageRef];
不过好像没什么区别。 如果这是最简单的方法,我不介意在添加缩略图文件时裁剪它,但它需要在 iPhone 和 iPad 上运行。
最简单的解决方案是什么?
CellForRow 方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
//Configure the cell...
Story *storyAtCell = [fetchedResultsController objectAtIndexPath:indexPath];
//this should be the sentence object in sentences with an order of 0
NSPredicate *predicateTitle = [NSPredicate predicateWithFormat:@"order=0"];
NSSet *sentences = [[storyAtCell sentences] filteredSetUsingPredicate:predicateTitle];
Sentence *sentenceAtCell = [sentences anyObject];
cell.textLabel.text = sentenceAtCell.text;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *uniquePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:[sentenceAtCell thumb]];
// This should crop it as you want - you've just got to create cropRect.
UIImage *largeImage = [UIImage imageWithContentsOfFile: uniquePath];
//CGRect cropRect = CGRectMake(0, 0, 66, 50);
//CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
//Discussion here: https://***.com/questions/9643818/how-can-i-crop-images-in-cell-imageview-image-for-uitableviews
UIImageView *cellimage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0 , 66, 50)];
UILabel *labelFrame = [[UILabel alloc] initWithFrame:CGRectMake(0, 0 , 70, 50)];
[cell.contentView addSubview:cellimage];
[cell.contentView addSubview:labelFrame];
[cellimage setImage:largeImage];
//cell.imageView.image = [UIImage imageWithCGImage: cellimage];
//CGImageRelease(imageRef);
[cellimage release];
[labelFrame release];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
【问题讨论】:
查看我在回答中的最后一条评论 【参考方案1】:限制 ImageView 大小对我很有用:
UIImageView *cellimage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0 , 107, 70)];
[cell.contentView addSubview:cellimage];
[cellimage setImageWithURL:[self.Featured_ImageURLs objectAtIndex:indexPath.row - 1]
placeholderImage:[UIImage imageNamed:@"small_news_default.png"] View:@"Highlights"]; // you have to change this based on your code.
[cellimage release];
【讨论】:
感谢您的回答 - 这使图像尺寸完美,但它们现在重叠/剪切了我的单元格文本 - 您如何解决这个问题? 制作一个框架超过 107 ..(图像视图宽度)的 Uilabel,并将其添加到 contentView。 UILabel *labelFrame = [[UILabel alloc] initWithFrame:CGRectMake(0, 0 , 70, 50)];只是将图像换成白框而不移动文本。 (我的 imageview 宽度是 66px)。 UIImageView *cellimage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0 , 66, 50)]; UILabel *labelFrame = [[UILabel alloc] initWithFrame:CGRectMake(0, 0 , 70, 50)]; [cell.contentView addSubview:cellimage]; [cell.contentView addSubview:labelFrame]; [单元图像集图像:大图像]; [细胞图像发布]; [labelFrame 发布]; label 应该这样声明... [[UILabel alloc] initWithFrame:CGRectMake(70, 0 , 140, 50)];您必须将其原点设置为大于图像宽度以上是关于如何为 UITableViews 裁剪 cell.imageview.image 中的图像?的主要内容,如果未能解决你的问题,请参考以下文章
如何为自定义 TableViewCell 和 CollectionView Cell 使用一个 UIView。?
如何为 CoreData 多对多关系编写 NSPredicate