ios UIScrollView 和 多个UITableView混用的性能问题
Xb新博网址多少
Xb新博网址多少
当前位置 : Xb新博网址多少 > 新博nb88官网

ios UIScrollView 和 多个UITableView混用的性能问题

1、问题描述

  • 在UIScrollView上放置多个UITableView,可以横向滑动。在数据量较多的情况下导致视图加载缓慢,界面卡死,而且无法返回上一界面。

  • 底部是UIScrollView实现,可以左右滑动。每一个展示视图是UITableView实现,每一UITableView视图个数不确定,可以上下滑动。而且要求每一个UITableViewCell可以单独拖动到其他UITableView中去。

2、相关代码实现

pragma mark 请求看板数据

    - voidloadData {
        
        [APPUtil showActivityIndicatorInView:self.view tag:121212];
        
        apiPB = [GetProjectBoardApi new];
        apiPB.tid = @_project_id.integerValue;
        
        
        [apiPB startWithCompletionBlockWithSuccess:^__kindof YTKBaseRequest *request {
            
            dispatch_asyncdispatch_get_global_queue0, 0, ^{
                // 处理耗时操作的代码块...
                    _model = [ProjectBoardModel mj_objectWithKeyValues:request.responseJSONObject];
                
                resultDict = [NSDictionary dictionaryWithDictionary:request.responseJSONObject];
                
                
                //通知主线程刷新
               dispatch_asyncdispatch_get_main_queue, ^{
        
                    [self setUpDateWithModel:_model];
                   
                };
            
            };
            
            
        } failure:^__kindof YTKBaseRequest *request {
            
            [APPUtil hideActivityIndicatorInView:self.view mtag:121212];
            
        }];
}

pragma mark 设置数据源

- voidsetModel:ProjectBoardModel *model {
    
    _model = model;
    
    [self removeAllSubviews];
   
    [self.listTableViewArray removeAllObjects];
    
    //设置移动范围
    self.contentSize = CGSizeMake_model.teamtask.count + 1 * ScreenWidth - 45.0f, self.yyHeight;
    
   #pragma mark 循环创建list
    
    [_model.teamtask enumerateObjectsUsingBlock:^TaskListModelPro * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop {
        
        //list便宜量
        static CGFloat nextX = 0.0f;
        
        //tableView背景视图
        UIView *listView = {
            UIView *listView = UIView.new;
            listView.backgroundColor = Global_BackgroundColor;
            [self addSubview:listView];
            //通过Masonry设置autolayout,设置前一定要钱添加在父视图上
            [listView makeConstraints:^MASConstraintMaker *make {
                make.left.equalTonextX;
                make.top.equalTo20;
                make.width.equalToScreenWidth-60;
                make.height.equalTokListViewMaxHeight;
            }];
           
            
            //初始化tableView
            UIView *listTableView = {
                BoardViewListTableView *listTableView = [BoardViewListTableView new];
                //设置tableView的contentInset也可以通过设置tableView的autolayout来做,可以避免长按header时识别成cell的情况,长按头部应该是移动整个list
                listTableView.contentInset = UIEdgeInsetsMake46, 0, 44, 0;
                listTableView.backgroundColor = Global_ClearColor;
                listTableView.delegate = self;
                listTableView.dataSource = self;
                //估算rowHeight,必须设置,否则会引起卡顿
                listTableView.estimatedRowHeight = 90;
               
                [listTableView registerClass:[BoardViewListCell class] forCellReuseIdentifier:NSStringFromClass[BoardViewListCell class]];
                
                //每一个tableView保存自己的数据源指针
                listTableView.model = obj;
                
                listTableView.tableFooterView = UIView.new;
                //显示每一列的滚动条(现在有Bug不显示)
                listTableView.showsVerticalScrollIndicator = YES;
                listTableView.showsHorizontalScrollIndicator = YES;
                [listView addSubview:listTableView];
                [listTableView makeConstraints:^MASConstraintMaker *make {
                    make.left.equalTo0;
                    make.top.equalTo0;
                    make.right.equalTo0;
                    make.bottom.equalTo0;
                }];
                
                [listTableView reloadSectionIndexTitles];
                
                //保存listTableView指针
                [self.listTableViewArray addObject:listTableView];
                
                //设置偏移量
                nextX = idx+1*ScreenWidth-60+15;
                
    
                listTableView;
            };
            listView;
        };
        //nextX置空
        if idx+1 == _model.teamtask.count {
            nextX = 0;
        }
        
    }];
    
    
}

3、截图

应该怎么改进?

栏目列表

广告位

Xb新博网址多少