选中 UITableViewCell 图像变大

3
我正在开发一个应用程序,其中包含显示照片相册列表的一些功能。我使用了原始的UITableView和原始的UITableViewCells。我使用了Subtitle风格的UITableViewCell,并在cell.imageView.image上设置了缩略图。注意:这不是自定义单元格,而是内置单元格imageView。

问题在于,当我点击一个单元格时,imageView会变大,这看起来很奇怪,因为a)这不是直观的行为,b)它不再与其他每一行匹配。

在选择之前,单元格的imageView框架如下:

cell.imageView.frame: {{16, 1}, {84, 84}}

在选择后,单元格的imageView框架为:
cell.imageView.frame: {{16, 0}, {88, 87.5}}

我没有涉及任何代码,这只是一个原始的UITableViewCell。

enter image description here

我唯一与imageView互动的代码是PhotoKit代码,用于获取照片资源并更新单元格:

PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
options.resizeMode = PHImageRequestOptionsResizeModeExact;

[self.imageManager requestImageForAsset:asset
                 targetSize:AssetGridThumbnailSize
                contentMode:PHImageContentModeAspectFill
                    options:options
              resultHandler:^(UIImage *result, NSDictionary *info) {

                  // Only update the thumbnail if the cell tag hasn't changed.
                  // Otherwise, the cell has been re-used.
                  if (cell.tag == currentTag) {
                      cell.imageView.contentMode = UIViewContentModeScaleAspectFill;
                      cell.imageView.image = result;
                  }

              }];

为什么会发生这种情况?我该如何停止它?

我认为你的tableView的heightForRowAtIndex:方法返回的值比cell的高度小。为了测试它是否正常工作,请从该方法中返回一些显著大的值。 - Shamsiddin Saidov
2个回答

0

你的自定义UITableViewCell有一个名为“imageView”的outlet,这是问题的原因。移除该outlet即可解决问题。


-2

我发现当你设置UIImageView.ContentMode = UIViewContentModeScaleAspectFill时

如果你请求一个网络图片,并且下载完成并回调,那么ImageView将改变它的框架

你可以尝试这个方法

[img setClipsToBounds:YES];

图片不再显示更多,因此不需要裁剪。它使用相同的图像数据,从PhotoKit而不是网络中提取,并在较大的框架中显示它。裁剪无法解决问题,因为框架已经变大了。 - Kenny Wyland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接