UITableView的UITableViewStyleGrouped,group默认会给你一个sectionHeader和一个sectionFooter的默认高度,设计师会让把这个header或者footer设置为0。
就是把0.001 换成 CGFLOAT_MIN ,这样更好(看起来专业点?),懂得就不用往下看了。
这个功能简直太常用了,大家也都写过,网上的教程也巨多,大家一贯的写法,应该是下面这种:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 0.01;//0.001,0.0001,0.00001
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0.01;//0.001,0.0001,0.00001
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
return [UIView new];
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return [UIView new];
}
这么写当然没有问题,不管是小数点后几个0,都是为了让高度尽可能的小
这里,有个宏定义CGFLOAT_MIN
,跟CGFLOAT_MAX
对应,CGFloat的最大和最小值,我们直接用这个来替代0.001,就可以实现同样效果,如下:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return CGFLOAT_MIN;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return CGFLOAT_MIN;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
return [UIView new];
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return [UIView new];
}
Swift 可以用
CGFloat.zero
PS:这里补充一丢丢(2021.9.27- 测试环境Xcode:playground),
使用CGFloat.zero 作为header或者footer的高度时,对应方法
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return nil
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return nil
}
是不会执行的,但是设置高度0.000001时,这个方法还是会走一下,(又多个使用CGFloat.zero、CGFLOAT_MIN
的借口)。
因此设置为UIView()
也好,还是nil
也好,都一样。
网友评论