14

我正在使用 webcache 加载 facebook 用户列表,它的效果非常好。在您选择其中一个单元格之前,它似乎改变了内容模式,或者更有可能改变了 uiimageview 框架的大小,但基于图片的实际大小。为了清楚起见,这里有一些屏幕

在这里加载 http://img.photobucket.com/albums/v246/homojedi/Screenshot20120727114807.png

在选择一些图像时,你可以看到它们似乎跳到了它们原来的样子。 http://img.photobucket.com/albums/v246/homojedi/Screenshot20120727114827.png

正如预期的那样,如果我将它们从屏幕上滚动并返回到它们,它们会恢复到开始时的状态。

真是莫名其妙。我唯一没有尝试过的是将 uitableView 子类化并在那里设置其布局子视图。除此之外,我还能做些什么吗?

编辑:请求的代码

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // typically you need know which item the user has selected.
    // this method allows you to keep track of the selection
    _indexPath = indexPath;

    [_indexPath retain];
}
4

10 回答 10

57

我遇到了和你一样的问题,我解决了

问题是由您将 imageView 命名为“imageView”引起的

我不知道为什么

如果您更改 imageView 名称,例如“m_imageView”

问题已解决

一切都是为了命名!

于 2013-06-15T11:54:43.773 回答
19

我遇到了这个问题,但我imageView的自定义 UITableViewCell 中没有属性。

事实上,我确实犯了一个愚蠢的错误,将我的 imageView 对象中的一个额外的 IBOutlet 连接到 UITableViewCell 的默认imageView属性。这是因为我最初命名了我的 image view imageView,但后来我改变了它并忘记了出口。

额外的出口

取下插座后,一切正常。

于 2015-07-16T03:40:25.783 回答
7

以防万一像我这样的其他人遇到上述方法都不起作用的问题。

我也命名了我的UIImageView: imageView但是,由于某种原因,即使在重命名后,问题仍然存在。我尝试了我能想到的一切,重置模拟器,清理项目,添加删除约束......

事实证明,只需从情节提要中删除并拖动一个新的即可修复它。UIImageView

不可能是预编译问题,因为我清理了项目。去搞清楚。

于 2014-07-04T16:00:31.190 回答
2

我遇到了这个问题,我解决了!!!

检查以确保您在自定义 TableViewCell 中合成了 imageView 属性。

我忘了合成一个属性(导致 IBOutlet 没有 getter/setter)。

这个话题很老,但希望对其他人有所帮助!

于 2012-12-31T04:16:49.760 回答
2
// reason for this problem is UITableView cell's imageview initially has a default size later on it resize it self on select so following cab be a solution for this: (Using AFNetworking to set image/ You can adjust accordingly)

            __weak UItableViewCell *cellTemp = cell;

            [cell.imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:strURL]]
                                  placeholderImage:[UIImage imageNamed:@"placeholder"]
        success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
            {
                cellTemp.imageView.image = image;

                CGRect frameRect = cellTemp.imageView.frame;
                frameRect.origin.y = (cellTemp.frame.size.height - image.size.height)/2;
                frameRect.size.width = image.size.width;
                frameRect.size.height = image.size.height;
                cellTemp.imageView.frame = frameRect;

                [cellTemp layoutSubviews]; 
    // this will fit your cell's label

            }
        failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
            {

            }];
于 2015-05-20T06:51:32.067 回答
1

添加有关命名问题的答案:

如前所述,图像视图的问题即使在重命名后仍然存在。但不需要UIImageView从您的 xib 或情节提要中删除。您可以简单地按住 ctrl 并单击图像视图并删除与imageView仍然存在的属性的连接。

链接imageView仍然存在的原因似乎是该imageView属性在您在代码中删除后仍然可用。它仍然存在,因为它继承自UITableViewCell.

最后一个提示听起来很愚蠢,但我花了几分钟才意识到:显然所有使用属性名称的代码imageView仍然可以工作,但会导致奇怪的行为!因此,请仔细检查是否没有使用旧属性名称的代码。

于 2014-11-04T08:28:03.590 回答
1

我相信你的问题是由于 UIImageView。您应该设置一次图像 - cell.imageView.image = myImage。不要设置 highlightImage。设置 contentMode 以保持图像的纵横比:cell.imageView.contentMode = UIViewContentModeScaleAspectFit;,并验证 contentStretch rect 是否为 0,0,1,1(默认值)。

当它被选中时,tableView 可能正在更改 UIImageView 或其框架的 contentMode(谁知道原因)。我会将 NSLogs 添加到 willSelectRowAtIndexPath 和 didSelectRowAtIndexPath 中,显示相同的信息:imageView 框架、contentMode 值(作为整数)等。这些值中的一个或多个在选择时会发生变化。

于 2012-07-27T12:17:58.777 回答
1

我有同样的问题,即使在尝试了所有以前的答案之后,他们都没有成功。后来我发现 UITableViewController 有多个未使用的 Outlets,因此删除未使用的 Outlets 解决了问题。

于 2015-10-09T12:43:06.037 回答
0

// 如果你继承 UITableViewCell 你可以摆脱这个问题

- (void)layoutSubviews {

    [super layoutSubviews];
    self.imageView.bounds = CGRectMake(10,5,65,65);
    self.imageView.frame = CGRectMake(10,5,65,65);
    self.imageView.contentMode = UIViewContentModeScaleAspectFit;

}
于 2013-04-18T21:45:35.003 回答
0

按照 sebastian-Luczak 的要求,我确实提出了调整大小的解决方案,但现在图像质量不一致,只有当你触摸它时它才会获得更高的分辨率,奇怪但没有那么糟糕或引人注目,无论如何这里是代码。

注意我正在使用SDWebImage异步加载图片

[cell.imageView setImageWithURL:[NSURL URLWithString:path] placeholderImage:[UIImage imageNamed:@"Icon.png"]success:^(UIImage *image) 
 {
     cell.imageView.image = [image resizeImage:image newSize:CGSizeMake(38, 38)];

 } failure:^(NSError *error) 
 {

 }];
于 2012-08-09T04:32:32.467 回答