UITableViewCell中的UICollectionView - 仅在视图的一部分中接收

时间:2013-06-18 16:38:56

标签: iphone ios uitableview uicollectionview

我在接收UITableViewCells中包含的UICollectionViews时遇到问题。期望的效果是具有n行水平滚动UICollectionViews的UITableView。视图正确显示,但集合视图仅接收前44px中的触摸。我想,在创建集合视图时,表视图仍处于初始化过程中,并且在设置其手势识别器时集合视图使用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中返回200:heightForRowAtIndexPath:

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

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

提前谢谢,一如既往。

1 个答案:

答案 0 :(得分:1)

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