Ios UITapGestureRecognitor在UITableViewCell内的UIImageView上部分工作

Ios UITapGestureRecognitor在UITableViewCell内的UIImageView上部分工作,ios,uigesturerecognizer,Ios,Uigesturerecognizer,我有一张桌子。有些单元格可能有图像,我通过UIImageView将这些图像添加到单元格中。如果用户点击新的视图控制器(而不是单元格),这些图像会做出反应并打开它。图像大小不同 我在UIImageView中添加了UIApgestureRecognitizer,但它的行为很奇怪。我以为imageView的整个区域都会响应手势,但我只看到一些较小的区域,在所有图像上,该区域的位置都不同 以下是cell init的代码: - (id)initWithStyle:(UITableViewCellStyle

我有一张桌子。有些单元格可能有图像,我通过UIImageView将这些图像添加到单元格中。如果用户点击新的视图控制器(而不是单元格),这些图像会做出反应并打开它。图像大小不同

我在UIImageView中添加了UIApgestureRecognitizer,但它的行为很奇怪。我以为imageView的整个区域都会响应手势,但我只看到一些较小的区域,在所有图像上,该区域的位置都不同

以下是cell init的代码:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

    UIImageView *thumbnailImageView = [[[UIImageView alloc] init] autorelease];
    thumbnailImageView.tag = CELL_THUMBNAIL_TAG;
    thumbnailImageView.userInteractionEnabled = YES;

    [self.contentView addSubview:thumbnailImageView];

    UITapGestureRecognizer *pictureTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handlePictureTap:)];
    [thumbnailImageView addGestureRecognizer:pictureTap];
    [pictureTap release];
所有带有图像的单元格都以不同的方向正确显示 通过layoutSubviews方法定位单元格内的图像和文本:

}

在tableView:cellForRowAtIndexPath:method中,我只需将所有必需的数据传递给单元格,因此整个配置将在LayoutSubview中进行


尽管所有内容都正确显示,您能帮我确定为什么对点击手势做出反应的区域对所有图像视图都是随机和奇怪的吗?

在列出了一长串想法之后,我终于找到了这种奇怪行为的原因。它可能会帮助任何有类似问题的人

在这个项目中,我创建了UITableViewCell子类。由于所有单元格的大小可能不同,我在tableView:heightForRowAtIndexPath:method中提供了正确的高度

然而,在我的自定义单元初始化方法中,我没有设置正确的自动调整大小掩码。导致UITableViewCellContenView视图的恒定高度为44磅。此视图是所有单元格内容的超级视图

我不知道为什么尽管如此,所有的单元格内容都显示正确,大小合适,但所有的手势都只在这个44磅高的区域内到达imageView

背景

self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

在自定义UITableViewCellInit方法中,我解决了这个问题。

我也遇到了同样的问题,UITableViewCellsHanks的行为非常奇怪!在一个表中,我使用了
tableView:didSelectRowAtIndexPath
回调,即使使用自定义高度也可以正常工作。但是当我在另一个表中使用tap识别器时,我得到了一个奇怪的行为。这个错误也发生在UICollectionViewCell上,并且可以通过这个答案来修复。奇怪的是,只有在我使用Xcode 6 beta版构建应用程序并在iOS 7中启动应用程序时,才会出现此错误。iOS 8完全可以。或者如果我用Xcode 5构建我的应用程序,它也可以。
self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;