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