UITableView中嵌套UICollectionView自动
2019-12-10 本文已影响0人
xing_x
1.UITableView的设置:
预设高度
_table.rowHeight=UITableViewAutomaticDimension;
_table.estimatedRowHeight = 200;
2.自定义Cell中是个UICollectionView的设置
对cell中子View的约束可以用纯代码,也可以用xib,需要注意的是,不管用哪种方式都需要给UICollectionView加个ContainerView,这个ContainerView不是Cell.contentView,而是一个自定义的View,需要通过UICollectionView的高度撑开Container的高度,才能让自定义的Cell高度自适应。
下面纯代码的约束,用的Masonry约束方式,开始使用的SDAutoLayout约束方式,ContainerView的高度不能被撑开。
@interface TR_EquipmentPicturesCell : UITableViewCell
@property (strong, nonatomic)UIView * collectionContainer;
@property (strong, nonatomic) UICollectionView *collectionView;
@end
-(UIView*)collectionContainer{
if (_collectionContainer==nil) {
_collectionContainer = [[UIView alloc]initWithFrame:CGRectZero];
[self.contentView addSubview:_collectionContainer];
[_collectionContainer mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.contentView).offset(0);
make.left.equalTo(self.contentView).offset(16);
make.width.mas_equalTo(KScreenWidth-32);
make.height.mas_equalTo(60);
make.bottom.equalTo(self.contentView).offset(0);
}];
}
return _collectionContainer;
}
疑问1:
为什么将宽度写死?
如果不将宽度写死,无法确定view的高度
-(UICollectionView*)collectionView{
if (_collectionView==nil) {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
layout.minimumLineSpacing = 0;
layout.minimumInteritemSpacing = 0;
layout.sectionInset = UIEdgeInsetsMake(5, 0, 5, 0);
_collectionView = [[UICollectionView alloc]initWithFrame:CGRectZero collectionViewLayout:layout];
_collectionView.scrollEnabled = NO;
_collectionView.scrollsToTop = NO;
_collectionView.backgroundColor = [UIColor redColor];
[_collectionView registerNib:[UINib nibWithNibName:@"TR_RerpairPictureCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:cellID];
[self.collectionContainer addSubview:_collectionView];
[_collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.collectionContainer);
}];
_collectionView.delegate = self;
_collectionView.dataSource = self;
}
return _collectionView;
}
设置数据源设置完数据源之后需要更新ContainerView 的高度,这样才能更新cell的高度,这样就可以实现自动算高
- (void)setData{
[self.collectionView reloadData];
//立即layoutIfNeeded获取contentSize
[self.collectionContainer layoutIfNeeded];
CGFloat height = self.collectionView.collectionViewLayout.collectionViewContentSize.height;
NSLog(@"高度123===%lf",height);
[self.collectionContainer mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(height);
}];
}