gpt4 book ai didi

swift - 如何创建 tableview 部分之间的间距? (每个部分的页眉和页脚已经是自定义 View )

转载 作者:行者123 更新时间:2023-11-28 10:45:00 30 4
gpt4 key购买 nike

我想实现一个表:

  • 部分
  • 每个部分都有页脚和页眉
  • 页脚和页眉会粘在表格上
  • 每个部分之间有一个空格

它看起来像这样:

enter image description here

我不知道如何实现部分之间的空间。

a) 通常的方法是设置节页眉或节页脚的高度。

b) 我已经尝试让页脚包含部分之间的空间,但是粘性页脚也包含这个空间,看起来很难看:

enter image description here

这就是我配置每个部分的页眉和页脚的方式:

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 44
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 80
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let contentView = UIView()
......
return contentView
}

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let contentView = UIView()
......
return contentView
}

我需要自定义页眉和页脚,因为我想使用它们的粘性功能,这意味着在表格顶部将显示当前页眉部分,在底部显示最后一个可见部分页脚(因此这些会随着滚动而变化).

最佳答案

据我所知,没有“简单”的方法可以做您想做的事。但这也不难。正如@Tom 建议的那样,您需要为空白空间使用一个空单元格。但是空单元格必须放在它自己的没有页眉或页脚的部分中。

我整理了一些非常快速的内容来帮助您入门(将其添加到 Playground 以查看实际效果)。在下图中,标题为绿色,内容单元格为蓝色,页脚为黄色,间隔符为白色:

enter image description here

import UIKit
import PlaygroundSupport

class ContentCell: UITableViewCell {

}

class SectionSpacerCell: UITableViewCell {

}

class MyViewController : UIViewController, UITableViewDataSource, UITableViewDelegate {

var tableView: UITableView!

private var sections: [Int] = []

override func loadView() {
let view = UIView()
view.backgroundColor = .white

tableView = UITableView(frame: view.bounds)
tableView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

tableView.register(ContentCell.self, forCellReuseIdentifier: "ContentCell")
tableView.register(SectionSpacerCell.self, forCellReuseIdentifier: "SectionSpacerCell")

tableView.dataSource = self
tableView.delegate = self

view.addSubview(tableView)
self.view = view
}

override func viewDidLoad() {
super.viewDidLoad()

sections = [4, 7, 4, 2, 7]
tableView.reloadData()
}

// MARK: UITableViewDataSource

func numberOfSections(in tableView: UITableView) -> Int {
return sections.count > 0 ? sections.count + (sections.count - 1) : 0
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return section % 2 == 0 ? sections[section / 2] : 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section % 2 == 0 {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "ContentCell") as? ContentCell else {
fatalError("Oops!")
}
cell.backgroundColor = .blue
return cell
}
else {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "SectionSpacerCell") as? SectionSpacerCell else {
fatalError("Oops!")
}
cell.backgroundColor = .white
return cell
}
}

// MARK: - UITableViewDelegate

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
if section % 2 == 0 {
return 40
}
return 0
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if section % 2 == 0 {
let headerView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
headerView.backgroundColor = .green
return headerView
}
return nil
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
if section % 2 == 0 {
return 40
}
return 0
}

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
if section % 2 == 0 {
let headerView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
headerView.backgroundColor = .yellow
return headerView
}
return nil
}

}

PlaygroundPage.current.liveView = MyViewController()

关于swift - 如何创建 tableview 部分之间的间距? (每个部分的页眉和页脚已经是自定义 View ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48835982/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com