0

我有一个UICollectionView在一个习惯UITableViewCell,只有UIImageViewUICollectionView。我SDWebImage用来加载图像。我想要的是在加载图像之后,UICollectionView它的 contentView( UITableViewCell) 都会更新自己的高度以显示所有图像。例如,如果我有三张图片UICollectionView,我希望collectionview's高度等于所有三张图片的高度总和。这是一些代码 TableView

- (void)createPostDetailUI{
    _postDetailTableView = [UITableView new];
    _postDetailTableView.delegate = self;
    _postDetailTableView.dataSource = self;
    _postDetailTableView.estimatedRowHeight = 180;
    _postDetailTableView.tableFooterView = [UIView new];
    [_postDetailTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    _postDetailTableView.rowHeight = UITableViewAutomaticDimension;

    [self makeConstraints];
}

- (void)makeConstraints{
    [_postDetailTableView mas_makeConstraints:^(MASConstraintMaker *make) {
        UIEdgeInsets padding = UIEdgeInsetsMake(0, 0, 50, 0);
        make.edges.equalTo(self.view).insets(padding);
    }];
}

- (void)requestPostData{
    //some request code
    [_commentsArray addObjectsFromArray:[PostCommentModel arrayWithResponseObject:responseObject][0]];
    [_postDetailTableView reloadData];
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return _commentsArray.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    PostDetailHeaderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"PostDetailHeaderTableViewCell" forIndexPath:indexPath];
    cell = [[PostDetailHeaderTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"PostDetailHeaderTableViewCell"];
    [cell updateCellWithModel:_postModel];

    return cell;
}

UITableViewCell(里面的UICollectionView):

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {       
        //some other views

        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
        layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);
        layout.minimumLineSpacing = 4.0;
        layout.estimatedItemSize = CGSizeMake(300, 300);
        _postImageCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
        _postImageCollectionView.backgroundColor = [UIColor clearColor];
        _postImageCollectionView.showsHorizontalScrollIndicator = NO;
        _postImageCollectionView.autoresizesSubviews = YES;
        [_postImageCollectionView registerClass:[PostDetailImageCollectionViewCell class] forCellWithReuseIdentifier:@"PostDetailImageCollectionViewCell"];
        _postImageCollectionView.delegate = self;
        _postImageCollectionView.dataSource = self;
        [self.contentView addSubview:_postImageCollectionView];

        [self makeConstraints];
    }
    return self;
}

- (void)makeConstraints{
    //some other views' autolayout code

    [_postImageCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(_postContentLabel);
        make.right.equalTo(_postContentLabel);
        make.top.equalTo(_postContentLabel.mas_bottom).offset(14);
        make.height.greaterThanOrEqualTo(@20);
        make.bottom.equalTo(self.contentView).offset(-16);
    }];
}

- (void)updateCellWithModel:(PostsModel *)model{

    _imageArray = [model getImageList];
    [_postImageCollectionView reloadData];
}

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 1;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return _imageArray.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    PostDetailImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"PostDetailImageCollectionViewCell" forIndexPath:indexPath];
    NSString *cellImageURL = _imageArray[indexPath.row];
    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:cellImageURL] placeholderImage:[UIImage imageNamed:@"icon_default"]];

    return cell;
}

UICollectionViewCell:

- (instancetype)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        _imageView = [UIImageView new];
        _imageView.frame = self.contentView.frame;
        _imageView.contentMode = UIViewContentModeScaleAspectFit;
        [self.contentView addSubview:_imageView];
    }
    return self;
}

我使用自动布局并使用砖石来管理它。但无论我尝试修复它,它只会显示 20pt 高度。

ps:如何使CollectionViewCell框架适合图像框架

4

1 回答 1

0

试试这个来计算高度

CGheight height= [self.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height+2;

在您的自定义单元格中添加它并从 collectionview 委托方法中调用它

于 2016-05-18T06:30:27.947 回答