如何修改insetGrouped样式下UITableView的圆角半径?
修改insetGrouped样式UITableView的圆角半径方法
方法一:自定义Section背景视图(兼容多版本,推荐)
这种方法不依赖系统私有视图结构,稳定性更高:
- 创建自定义背景视图,按需设置圆角和边角:
func createSectionBackgroundView(for section: Int, totalSections: Int, radius: CGFloat = 16) -> UIView { let bgView = UIView() bgView.backgroundColor = .systemGray6 // 匹配系统insetGrouped背景色 var corners: CACornerMask = [] // 根据section位置设置圆角方向 if section == 0 { corners.formUnion([.layerMinXMinYCorner, .layerMaxXMinYCorner]) } if section == totalSections - 1 { corners.formUnion([.layerMinXMaxYCorner, .layerMaxXMaxYCorner]) } if totalSections == 1 { corners = [.layerMinXMinYCorner, .layerMaxXMinYCorner, .layerMinXMaxYCorner, .layerMaxXMaxYCorner] } bgView.layer.cornerRadius = radius bgView.layer.maskedCorners = corners bgView.layer.masksToBounds = true return bgView } - 在TableView代理方法中替换系统section背景:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let bgView = createSectionBackgroundView(for: section, totalSections: tableView.numberOfSections) // 若需要显示header文本,可添加UILabel到bgView上 return bgView } func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { return UIView() // 隐藏默认footer,避免间距问题 } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 10 // 匹配系统insetGrouped的header间距,可按需调整 } func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { return .leastNormalMagnitude } - 最后设置TableView背景透明:
tableView.backgroundColor = .systemBackground
方法二:iOS 15+ 直接修改系统Section背景视图
此方法依赖系统视图结构,可能随iOS版本更新失效:
- 在
willDisplayHeaderView代理方法中找到系统背景视图并修改圆角:func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { // 遍历子视图找到系统的section背景视图 if let sectionBgView = view.subviews.first(where: { $0.className == "UITableViewSectionBackgroundView" }) { sectionBgView.layer.cornerRadius = 16 // 设置自定义圆角值 } } - 同理,若需要处理section底部圆角,可在
willDisplayFooterView中做类似操作。
内容的提问来源于stack exchange,提问作者yxk
相关产品推荐
相关产品推荐

