如何在UITableView的Section Header 2与Header1最后一个Cell间加间距
解决UITableView Section Header与上一Section最后一个Cell的间距问题
嘿,我来帮你搞定这个需求!根据你描述的场景(UITableView有两个红色带按钮的Section Header,需要在HEADER 2和HEADER 1对应的最后一个Cell之间添加间距),结合你现有的自定义Header代码,我推荐两种简单可靠的实现方式:
方案一:给Section 0添加透明Footer(最推荐)
这种方法完全不改动你现有的自定义Header逻辑,只需要给第一个Section(对应HEADER 1的Section)添加一个高度为目标间距的透明Footer,就能在它的最后一个Cell和第二个Section的Header之间留出完美空隙。
需要新增的代码:
// 设置Section Footer的高度 -(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { // 仅给Section 0设置间距高度(比如20pt),其他Section设为0避免多余空隙 return section == 0 ? 20 : 0; } // 返回透明的Footer视图,不影响视觉效果 -(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { UIView *footerView = [[UIView alloc] initWithFrame:CGRectZero]; footerView.backgroundColor = [UIColor clearColor]; return footerView; }
方案二:调整Section 1 Header的顶部位置(iOS 15+适用)
如果你只需要适配iOS 15及以上版本,也可以直接调整第二个Section Header的Frame来实现间距。不过记得先关闭系统默认的Section Header顶部 padding,避免冲突:
修改后的自定义Header代码:
// 先在viewDidLoad中关闭系统默认间距(iOS 15+) - (void)viewDidLoad { [super viewDidLoad]; if (@available(iOS 15.0, *)) { self.tableView.sectionHeaderTopPadding = 0; } } // 你的自定义Header方法,新增间距调整逻辑 -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 45)]; view.backgroundColor = [UIColor redColor]; view.layer.borderColor = [UIColor blackColor].CGColor; view.layer.borderWidth = .5; UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.semanticContentAttribute = UISemanticContentAttributeForceLeftToRight; button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight; button.transform = CGAffineTransformMakeScale(-1.0, 1.0); button.titleLabel.transform = CGAffineTransformMakeScale(-1.0, 1.0); button.imageView.transform = CGAffineTransformMakeScale(5.0, 1.0); button.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 24); button.frame = view.frame; button.titleLabel.tintColor = [UIColor blackColor]; [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; button.titleLabel.textColor = [UIColor blackColor]; button.titleLabel.font = [UIFont systemFontOfSize:13]; [view addSubview:button]; if (section == 0) { [button setTitle:@"HEADER 1" forState:UIControlStateNormal]; } else { [button setTitle:@"HEADER 2" forState:UIControlStateNormal]; // 给HEADER 2添加顶部间距(比如20pt) CGRect headerFrame = view.frame; headerFrame.origin.y = 20; view.frame = headerFrame; } return view; }
小提示
- 方案一兼容性拉满,适配所有iOS版本,而且不会破坏原有布局逻辑,优先推荐使用。
- 如果选择方案二,一定要记得关闭系统默认的
sectionHeaderTopPadding,否则会出现双间距的问题。
内容的提问来源于stack exchange,提问作者KikX
相关产品推荐
相关产品推荐

