iOS 中 UITableView 部分之间的额外 Space 15
Extra Space Between UITableViewSections in iOS 15
UITableView
包含多个没有节页脚的节,在节之间显示额外的 space。 Xcode 的视图调试器显示它不是一个视图,而只是一个空的 space。
在我的例子中,这种行为是不受欢迎的。
尝试添加 1.0/0.0 高度的页脚没有帮助。也不会更改 table 视图的 style
.
这是一个示例代码:
import UIKit
final class ViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.separatorColor = .yellow
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = UIView()
header.backgroundColor = .green
return header
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 20.0
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.backgroundColor = .blue
return cell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 30.0
}
override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let footer = UIView()
footer.backgroundColor = .red
return footer
}
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 20.0
}
}
这是 iOS 14 和 iOS 15 中的输出:
在 iOS 15 中添加了 属性 sectionHeaderTopPadding
。它会影响确切的 space。 属性 的默认值为 automaticDimension
。将其设置为 0.0 可解决问题。
由于 属性 仅在 iOS 15 中可用,您可能需要用可用性块包装它:
if #available(iOS 15.0, *) {
tableView.sectionHeaderTopPadding = 0.0
}
这是问题的原始代码片段,包括必要的更改:
import UIKit
final class ViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.separatorColor = .yellow
if #available(iOS 15.0, *) {
tableView.sectionHeaderTopPadding = 0.0
}
}
// The rest is without changes.
}
这是 iOS 15 更改后的输出:
UITableView
包含多个没有节页脚的节,在节之间显示额外的 space。 Xcode 的视图调试器显示它不是一个视图,而只是一个空的 space。
在我的例子中,这种行为是不受欢迎的。
尝试添加 1.0/0.0 高度的页脚没有帮助。也不会更改 table 视图的 style
.
这是一个示例代码:
import UIKit
final class ViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.separatorColor = .yellow
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = UIView()
header.backgroundColor = .green
return header
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 20.0
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.backgroundColor = .blue
return cell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 30.0
}
override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let footer = UIView()
footer.backgroundColor = .red
return footer
}
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 20.0
}
}
这是 iOS 14 和 iOS 15 中的输出:
在 iOS 15 中添加了 属性 sectionHeaderTopPadding
。它会影响确切的 space。 属性 的默认值为 automaticDimension
。将其设置为 0.0 可解决问题。
由于 属性 仅在 iOS 15 中可用,您可能需要用可用性块包装它:
if #available(iOS 15.0, *) {
tableView.sectionHeaderTopPadding = 0.0
}
这是问题的原始代码片段,包括必要的更改:
import UIKit
final class ViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.separatorColor = .yellow
if #available(iOS 15.0, *) {
tableView.sectionHeaderTopPadding = 0.0
}
}
// The rest is without changes.
}
这是 iOS 15 更改后的输出: