4

我正在基于我在 XIB 文件中创建的 UITableViewCell 原型构建一个表。该单元由几个标签和一个图像视图组成,需要拉伸以适应整个设备宽度。一旦宽度被拉伸,我也想将高度拉伸到相同的比例,所以我的图像被一致地缩放。

我得到的结果好坏参半。我已经能够使用以下代码适当地调整 CELL 的大小:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //pull the image from the array based on the indexPath
    NSUInteger row = [indexPath row];
    CITImage *image = [report.reportImages objectAtIndex:row];
    UIImage *img = [UIImage imageWithData:image.imageData];

    //see how we need to scale the image to make it fit within the full width of the screen
    float scale = tableView.frame.size.width /img.size.width;
    float imgHeight = img.size.height * scale;

    //return the necessary cell height
    return imgHeight;
}

问题是单元格内的 UIImageView 没有正确调整大小。当准备好绘制单元格时,我正在使用以下代码设置单元格的属性:

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    //pull the image from the array based on the indexPath
    NSUInteger row = [indexPath row];
    CITImage *image = [report.reportImages objectAtIndex:row];
    UIImage *img = [UIImage imageWithData:image.imageData];

    //attempt to get a reusable cell
    CITImageCell *cell;
    cell= [tableView dequeueReusableCellWithIdentifier:@"CITImageCellIdentifier"];
    if (cell == nil) {
        // Load the top-level objects from the custom cell XIB.
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CITImageCell" owner:self options:nil];
        cell = [topLevelObjects objectAtIndex:0];
    }

    //see how we need to scale the image to make it fit within the full width of the screen
    float scale = tableView.frame.size.width /img.size.width;
    float imgHeight = img.size.height * scale;

    NSLog (@"Height %f",cell.imageView.frame.size.height);
    //size the image view
    cell.imageView.frame = CGRectMake(0,34, tableView.frame.size.width, imgHeight+34 );
    NSLog (@"Height %f",cell.imageView.frame.size.height);

    //assign the image
    cell.imageView.image = img;

    //return the cell ready to go
    return cell;

}

两个 NSLog 语句验证高度值计算是否正确,但是当图像显示在屏幕上时,它的大小很少正确。大多数时候它的大小与 XIB 文件中定义的大小相同,但有时它采用正确的高度。我还没有找到一个很好的模式。它从来不是表中的第一项,总是第二项,有时是第四项和第五项。

仍在挖掘文档和其他人的故事,最让我感动的是我可以正确调整单元格大小,并且图像高度计算正确,但它仅在某些时候正确显示。

有什么帮助吗?显示我正在经历的截图的链接如下(是的,我昨晚正在观看辩论)

未缩放的图像

正确缩放的图像

谢谢!

4

3 回答 3

27

我遇到同样的问题。经过一个小时的工作,我意识到发生了什么!

问题是 UITableViewCell 已经有一个imageView!!

如果您对 使用相同的属性名称imageViewUIImageView系统会以某种方式修改imageView您定义的。

所以解决方案是不要使用名称imageView,尝试使用其他名称。

前任:

@property (nonatomic, weak) UIImageView *myImageView;

至少为我工作。:)

于 2013-01-08T11:51:49.153 回答
2

得到它的工作!我不知道这是否是唯一的方法,但我必须在运行时创建 UIImageView 并将其手动添加到单元格中,而不是尝试调整 XIB 文件中的那个。谁能解释这是为什么?

这是我结束的代码:

CGRect imageFrame = CGRectMake(0,34, tableView.frame.size.width, imgHeight);
UIImageView *imgView = [[UIImageView alloc] initWithFrame:imageFrame];
[imgView setImage:img];
[cell addSubview:imgView];
于 2012-10-24T00:35:56.400 回答
0

我认为我错过的另一个答案是使用 IB 将 UIImageView 的边界绑定到容器单元的底部。当时我不知道我能做到这一点,但一位朋友向我展示了如何做到这一点,我想我会在这里提到它。

于 2012-11-02T15:15:05.343 回答