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 调整大小并裁剪以适合

UIImage 未根据 UIImageView 大小宽度和高度调整大小

UIImageView 未设置图像在展开可选值时意外发现 nil

UIImageView 和 UIImage 大小相等

iPhone 编程:如何使 UIImageView 中的 UIImage 以实际大小显示?

防止 UITableViewCell 的 UIImageView 调整异步加载的 UIImage 的大小