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

1、问题描述

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

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

2、相关代码实现

pragma mark 请求看板数据

    - (void)loadData {

[APPUtil showActivityIndicatorInView:self.view tag:121212];

apiPB = [GetProjectBoardApi new];

apiPB.tid = @(_project_id.integerValue);

[apiPB startWithCompletionBlockWithSuccess:^(__kindof YTKBaseRequest *request) {

dispatch_async(dispatch_get_global_queue(0, 0), ^{

// 处理耗时操作的代码块...

_model = [ProjectBoardModel mj_objectWithKeyValues:request.responseJSONObject];

resultDict = [NSDictionary dictionaryWithDictionary:request.responseJSONObject];

//通知主线程刷新

dispatch_async(dispatch_get_main_queue(), ^{

[self setUpDateWithModel:_model];

});

});

} failure:^(__kindof YTKBaseRequest *request) {

[APPUtil hideActivityIndicatorInView:self.view mtag:121212];

}];

}

pragma mark 设置数据源

- (void)setModel:(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.equalTo(nextX);

make.top.equalTo(20);

make.width.equalTo(ScreenWidth-60);

make.height.equalTo(kListViewMaxHeight);

}];

//初始化tableView

UIView *listTableView = ({

BoardViewListTableView *listTableView = [BoardViewListTableView new];

//设置tableView的contentInset(也可以通过设置tableView的autolayout来做,可以避免长按header时识别成cell的情况,长按头部应该是移动整个list)

listTableView.contentInset = UIEdgeInsetsMake(46, 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.equalTo(0);

make.top.equalTo(0);

make.right.equalTo(0);

make.bottom.equalTo(0);

}];

[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、截图

图片描述

回答:

应该怎么改进?

以上是 ios UIScrollView 和 多个UITableView混用的性能问题 的全部内容, 来源链接: utcz.com/p/187224.html

回到顶部