美文网首页
iOS使用UITableView+UICollectionVie

iOS使用UITableView+UICollectionVie

作者: 玉思盈蝶 | 来源:发表于2020-11-21 12:24 被阅读0次

实现效果如下:

image.png

左边是桌位类型,右边是具体的桌位类型对应的桌号。
其实有两种实现方式,第一种是UICollectionView实现,左边的分组头就设置UICollectionView的header即可,设置header的frame。之前的同事就是这么实现的。现在发现有点问题,因为collectionView的复用导致滑动的时候左边header会消失的问题。

我的实现是左边UITableView+右边CollectionView的实现即可。然后在scrollViewDidScroll方法处理联动的效果。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if ([scrollView isKindOfClass:UICollectionView.class]) {
        [self.emptySeatTableView setContentOffset:CGPointMake(5, scrollView.contentOffset.y)];
    } else if ([scrollView isKindOfClass:UITableView.class]){
       [self.collectionView setContentOffset:CGPointMake(0, scrollView.contentOffset.y)];
    }
}

计算左边栏分组的行高:

#pragma mark - 计算对应行高
- (CGFloat)heightOfSection:(NSInteger)section {
    
    if (section == self.modelArray.count) {
        // 编辑按钮
        return k_Empty_Header_Edit_Height;
    }
    
    CGFloat h = 0;
    NSInteger numberOfSection = [self.modelArray objectAtIndex:section].tables.count;
    NSInteger i = (numberOfSection + self.numberOfColumn ) / self.numberOfColumn;
//    h = i * (k_Empty_Cell_Height + k_Empty_Cell_Margin) - k_Empty_Cell_Margin + k_Empty_Section_Top + k_Empty_Section_Bottom + 20;
    if(i <= 1){
        h = k_Empty_Cell_Height + k_Empty_Cell_Margin;
    } else {
        h = i * (k_Empty_Cell_Height + k_Empty_Cell_Margin) + k_Empty_Section_Top;
    }
    return h;
}

- (CGFloat)yOfSection:(NSInteger)section {
    if (section == 0) {
        return 0;
    } else {
        return [self heightOfSection:section - 1] + [self yOfSection:section - 1];
    }
}

PS:现在还有的一个问题就是滑动左边分组栏的时候会有闪动、抖动的情况,求解为啥呀???怎么解决???

相关文章

网友评论

      本文标题:iOS使用UITableView+UICollectionVie

      本文链接:https://www.haomeiwen.com/subject/xjbdiktx.html