问题描述
使用UITableViewDelegate
代理方法来设置header
或footer
时要注意了。
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return [UIView new];
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 1;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
return [UIView new];
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 1;
}
UITableView
在UI
布局中使用的场景很多,比如下图:
使用场景:让UITableView
的contentSize
的高度和父控件的高度一致。
- 没有使用分组(即没有设置
header
或footer
),这个时候通过获取UITableView
的contentSize
的高度来设置父控件的高度,显示出来的效果是正常的; - ⚠️⚠️使用了分组(即设置了
header
或footer
),这个时候通过获取UITableView
的contentSize
的高度来设置父控件的高度,显示出来的效果是不正常的;
剖析
举例:当我们使用UITableViewDelegate
代理方法来设置footer
时,先调用
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
,
然后调用
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;
,
但是当我们设置footer
的高度为0
或CGFLOAT_MIN
时,执行完
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
,
就不会调用
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;
,
所以这个时候通过获取UITableView
的contentSize
的高度来设置父控件的高度,显示出来的效果是不正常了。
解决方案
当我们使用UITableViewDelegate
代理方法来设置header
或footer
时,尽量不要给header
或footer
的高度设为0
或CGFLOAT_MIN
,应该设置一个很小的高度,eg
:1
,2...
。
网友评论