我在 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 像素?
预先感谢,一如既往。