UITableView 和 UICollectionView相关

动态改变tableHeaderView高度

在tableView的header部分添加collectionView用于展示选中的条目,需要根据选择的多少动态计算header高度,如果直接更改tableHeaderView的frame, 在整行删除最后一个的时候是不会生效的,虽然frame计算是对的, 而把tableHeaderView赋值给一个临时变量,然后修改frame,然后再改回来就不会出现这种bug


UITableView 和 UICollectionView相关_第1张图片
56730F65-1E8A-4172-9CDE-1B55150A0B6C.png
#define kListHeaderTopSpace 22 //collectionVIew顶部空间
- (void)calculateHeader{
//将此方法用block传递给自定义的UICollectionView的子类, 在layoutSubViews中执行比较直接
// 因为collectionView reload的时候肯定会去执行layoutSubViews方法

    CGFloat collectionViewH = self.listHeader.collectionView.contentSize.height;
    
    if (self.tableView.tableHeaderView.frame.size.height != collectionViewH +kListHeaderTopSpace) {
        CGRect frame = CGRectMake(0, 0, SCREEN_WIDTH, collectionViewH + kListHeaderTopSpace);
        UIView *view=self.tableView.tableHeaderView;
        view.frame = frame;
//直接给tableHeaderView重新赋值会刷新比较突然,
//而调用updates方法之后会有刷新的动画效果
        [self.tableView beginUpdates];
        self.tableView.tableHeaderView = view;
        [self.tableView endUpdates];
    }
    
}

你可能感兴趣的:(UITableView 和 UICollectionView相关)