我在接收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?
提前谢谢,一如既往。
答案 0 :(得分:1)
这里有一个facepalm,我使用的是在故事板中创建但主要是在代码中配置的UITableViewController。在storyboard中,我没有设置表视图的行高,所以它仍然是默认的44像素。当然,表视图查看了IB的初始配置,因此,虽然调用tableView:heightForRowAtIndexPath:
并且单元格正确显示,但IB中设置的初始高度影响了单元格子视图的创建方式。