在滚动时折叠UITableView标题可以通过以下步骤实现:
下面是一个示例代码,演示如何实现在滚动时折叠UITableView标题:
// 自定义标题视图
class CustomHeaderView: UITableViewHeaderFooterView {
let titleLabel = UILabel()
let collapseButton = UIButton()
override init(reuseIdentifier: String?) {
super.init(reuseIdentifier: reuseIdentifier)
// 设置标题文本
titleLabel.frame = CGRect(x: 16, y: 0, width: contentView.frame.width - 32, height: contentView.frame.height)
contentView.addSubview(titleLabel)
// 设置折叠按钮
collapseButton.frame = CGRect(x: contentView.frame.width - 40, y: 0, width: 40, height: contentView.frame.height)
collapseButton.addTarget(self, action: #selector(collapseButtonTapped), for: .touchUpInside)
contentView.addSubview(collapseButton)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc func collapseButtonTapped() {
// 更新折叠状态
// ...
// 刷新对应section
// tableView.reloadSections(...)
}
}
// 在UITableViewDelegate中实现折叠标题的逻辑
class ViewController: UIViewController, UITableViewDelegate {
var collapseStates = [Bool]() // 记录每个section的折叠状态
override func viewDidLoad() {
super.viewDidLoad()
// 初始化折叠状态数组
collapseStates = Array(repeating: false, count: numberOfSections)
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "CustomHeaderView") as? CustomHeaderView
// 设置标题文本
headerView?.titleLabel.text = "Section \(section)"
// 根据折叠状态设置折叠按钮的图标
let isCollapsed = collapseStates[section]
let buttonImage = isCollapsed ? UIImage(named: "expand_icon") : UIImage(named: "collapse_icon")
headerView?.collapseButton.setImage(buttonImage, for: .normal)
return headerView
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
// 根据折叠状态决定是否显示标题视图
return collapseStates[section] ? 0 : 44
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
// 遍历可见的indexPaths,判断是否需要显示标题视图
for indexPath in tableView.indexPathsForVisibleRows ?? [] {
let section = indexPath.section
let headerView = tableView.headerView(forSection: section) as? CustomHeaderView
headerView?.isHidden = false
}
// 遍历不可见的indexPaths,判断是否需要隐藏标题视图
for indexPath in tableView.indexPathsForVisibleRows ?? [] {
let section = indexPath.section
let headerView = tableView.headerView(forSection: section) as? CustomHeaderView
headerView?.isHidden = true
}
}
}
这是一个简单的示例代码,实现了在滚动时折叠UITableView标题的功能。你可以根据实际需求进行修改和扩展。
领取专属 10元无门槛券
手把手带您无忧上云