又是 UITableView 老生长谈了。。但是今天遇到了一个之前没遇到的问题
这筛选列表并不难,只是有个小坑 按照常规顺序- 先搞好数据源
- 弄好 cell 和 sectionheaderview
先思考个问题
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath复制代码
在有组头视图且每组都有cell
的情况下,这两个方法调用顺序是如何的 事实是,先调用 cell
的,再调用 sectionheader
的如此,然后瞬间懵逼,因为有个需要对齐的地方,如果说 章节里面有 第*章
之类的东西的话,需要对齐后面的内容。然后解决方案是 弄一个 Dict 存储 {section:@(startX)}
,这样的话你会发现,第一个分组的显示有问题但是之后的分组操作的时候正常,这是因为 开始 默认展开第一个分组,然后再展开其他分组的时候 section对应的 startX 已经有了一个正确的值,所以是正确的。为此,可专门在 tableView reloadData
之前,调用一次 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
section 为0,先混存一波 section = 0 时的 startX 的值。
如此,便是正常的界面了。