0

我在 UITableViewCells 中包含的 UICollectionViews 中接收触摸时遇到问题。想要的效果是具有n水平滚动 UICollectionView 行的 UITableView。视图显示正确,但集合视图仅接收顶部 44 像素的触摸。我想在创建集合视图时表格视图仍在初始化过程中,并且集合视图在设置手势识别器时使用 UITableView 的默认单元格高度。相关代码如下。

在我的 UITableViewCell 子类中,我为 UICollectionView 创建了一个容器视图:

- (void)layoutSubviews
{
    if (!_collectionViewContainer) {
        _collectionViewContainer = [[CVTCollectionViewContainer alloc] init];
        _collectionViewContainer.frame = self.bounds;
        [self.contentView addSubview:_collectionViewContainer];
    };
}

在我的容器视图中,我实例化了一个 UICollectionView:

- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];

    if (!self.collectionView) {

        UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
        self.collectionView = [[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout:flowLayout];
        self.collectionView.delegate = self;
        self.collectionView.dataSource = self;
        self.collectionView.backgroundColor = [UIColor clearColor];
        flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
        flowLayout.itemSize = CGSizeMake(130.0, 130.0);
        [_collectionView registerClass:[CVTCollectionViewCell class] forCellWithReuseIdentifier:@"Collection view cell"];
        [self addSubview:self.collectionView];
    }
}

我的 UITableViewController 没有什么有趣的,只是我在 tableView:heightForRowAtIndexPath 中返回 200:

我突然想到我的 UITableViewCell 子类的 layoutSubviews 方法可能是我的 UICollectionView 的“容器”视图初始化的错误位置。但是,当我NSLog(@"cell: %@", self);在 layoutSubviews 中时,单元格的框架显示所需的高度(200)。尽管如此,我还是觉得我为收藏视图设置得太早了,但我想不出我还能在哪里执行这项工作。

所以,要点:如何将 UICollectionView 添加到 UITableViewCell 并确保 UICollectionView 的手势识别器响应整个集合视图,而不仅仅是顶部 44 像素?

预先感谢,一如既往。

4

1 回答 1

1

这里有点麻烦,我使用的是在故事板中创建但主要在代码中配置的 UITableViewController。在故事板中,我没有设置表格视图的行高,所以它仍然是默认的 44 像素。当然,表格视图查看了 IB 的初始配置,因此,虽然tableView:heightForRowAtIndexPath:被调用并且单元格正确显示,但 IB 中设置的初始高度影响了单元格子视图的创建方式。

于 2013-06-18T19:45:09.300 回答