UIImageView 意外改变大小
Posted
技术标签:
【中文标题】UIImageView 意外改变大小【英文标题】:UIImageView changing size unexpectedly 【发布时间】:2014-02-15 19:15:09 【问题描述】:我有UITableView
,其中的单元格上有图像。我使用情节提要,并将UIImageView
连接为插座并将其命名为imageView
。我得到的图片有不同的尺寸(我通过 URL 下载)。但是当表格出现时,有时显示的图像尺寸不正确(假设是正方形,宽度和高度为 66x66,但在许多情况下,正方形更大,或者实际上宽度大于高度)。
显然我希望我的UIImageView
的边界稳定。有我的单元格代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
UILabel *labelText = (UILabel *)[cell viewWithTag:1000];
labelText.text = [[self.listOfPlaceDetails objectAtIndex:indexPath.row] objectForKey:@"name"];
if (cell == nil)
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
[cell.imageView setImageWithURL:[NSURL URLWithString:[[self.listOfPlaceDetails objectAtIndex:indexPath.row]objectForKey:@"imageFirst"]] placeholderImage:[UIImage imageNamed:@"dashie.png" ]completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType)
UIImage *resizedImage = [image resizedImageWithBounds:CGSizeMake(66, 66)];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.imageView.layer.cornerRadius = cell.imageView.bounds.size.width /2.0f;
cell.imageView.clipsToBounds = YES;
cell.separatorInset = UIEdgeInsetsMake(0, 82, 0, 0);
cell.imageView.image = resizedImage ;
];
cell.imageView.contentMode = UIViewContentModeScaleAspectFit;
return cell;
请解释一下发生了什么以及如何解决这个问题,任何建议将不胜感激,谢谢!
【问题讨论】:
【参考方案1】:添加新的 imageView 并设置图像。我建议您创建 uitablviewCell 的子类并将 imageView 添加为出口视图
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
UILabel *labelText = (UILabel *)[cell viewWithTag:1000];
labelText.text = [[self.listOfPlaceDetails objectAtIndex:indexPath.row] objectForKey:@"name"];
if (cell == nil)
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
UIImageView *imgView = [[UIImageView alloc] initWithFrame:yourFrame];
imgView.contentMode = UIViewContentModeScaleAspectFit;
[cell addSubview:imgView];
imgView.tag = 7;
UIImageView *img = (UIImageView*)[cell viewWithTag:7];
UIImage *resizedImage = [image resizedImageWithBounds:CGSizeMake(66, 66)];
img.imqge = resizedImage
【讨论】:
为什么要创建 2 个 UIImageView 实例? @EvgeniyKleban UIImageView 只有一个实例,*img 是对创建并添加到单元格的 imageView 的引用,由标签返回,当单元格被重用时。【参考方案2】:您正在使用标准 UITableViewCell 类并尝试更改其 imageView 属性。不是您在 Storyboard 上创建的单元格。
您应该阅读本教程Storyboards Tutorial in ios 7: Part 1。 您对部分感兴趣:
-
设计您自己的原型细胞
为单元使用子类
我会推荐使用 UITableViewCell 问题的子类。
【讨论】:
以上是关于UIImageView 意外改变大小的主要内容,如果未能解决你的问题,请参考以下文章
UIImage 未根据 UIImageView 大小宽度和高度调整大小
UIImageView 未设置图像在展开可选值时意外发现 nil