iOS表格绘制

iOS 仿Excel 实现

2021-05-27  本文已影响0人  赵哥窟

今天有个需求需要实现Excel的效果:如图


image.png

提醒

这只是一个demo,没有考虑那么多需求,也只是提供一个学习的思路。有具体的需求可以修改代码,避免重复造轮子。

实现的思路

顶部的Header
最左侧[左上头]放的是一个UILabel,后面就放的是一个UICollectionView。

头部下面
头部下面整体是一个UITableView,然后每个Cell的Header部分也是UlLabel,后面也是一个UICollectionView

难的部分

左右滚动
左右滚动的时候左边Header和顶部Header最左边固定,其他部分跟随滚动

上下滚动
顶部Header固定,其他部分跟随滚动

滚动部分核心代码

整个滚动Demo就这部分难一点,其他的都很简单,看看都懂的。

- (void)scrollViewDidScroll:(UIScrollView*)scrollView
{
    if ([scrollView isKindOfClass:[UICollectionView class]]) {
        if (scrollView.contentOffset.y != 0) {
            scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, 0);
        }
        NSLog(@"scroll %f",scrollView.contentOffset.x);
        
        self.topExcelCollectionView.contentOffset = scrollView.contentOffset;
        
        for (ExcelTableCell* cell in self.excelTableView.visibleCells) {
            for (UIView *view in cell.contentView.subviews) {
                if ([view isKindOfClass:[UICollectionView class]]) {
                    UICollectionView *collectionView = (UICollectionView *)view;
                    collectionView.contentOffset = scrollView.contentOffset;
                    self.cacheContentOffset = CGPointMake(scrollView.contentOffset.x, scrollView.contentOffset.y);
                }
            }
        }
        
    }else{
        self.topExcelCollectionView.contentOffset = self.cacheContentOffset;
        
        for (ExcelTableCell* cell in self.excelTableView.visibleCells) {
            for (UIView *view in cell.contentView.subviews) {
                if ([view isKindOfClass:[UICollectionView class]]) {
                    UICollectionView *collectionView = (UICollectionView *)view;
                    collectionView.contentOffset = self.cacheContentOffset;
                }
            }
            
        }
    }
    
}

Demo
下载地址

上一篇下一篇

猜你喜欢

热点阅读