SWIFT / UIKit 页脚文本显示在动态 tableViewCell 上
Posted
技术标签:
【中文标题】SWIFT / UIKit 页脚文本显示在动态 tableViewCell 上【英文标题】:SWIFT / UIKit Footer text displaying over dynamic tableViewCell 【发布时间】:2022-01-09 21:22:56 【问题描述】:我有一个只有两个单元格的 UITableViewcontroller 设置。页脚文本显示在最后一个单元格上。
奇怪的是,我还有其他控制器具有几乎相同的设置和代码,并且页脚按预期显示。
我尝试过更改样式组/插图等。
任何想法表示赞赏。谢谢
import UIKit
class LanguagesTableViewController: UITableViewController
var checked = [Bool]()
var choices = ["English","French"]
override func viewDidLoad()
super.viewDidLoad()
tableView.allowsMultipleSelection = false
let defaults = UserDefaults.standard
checked = defaults.array(forKey: "Language") as? [Bool] ?? [true, false]
override func viewDidAppear(_ animated: Bool)
super.viewDidAppear(animated)
updateSwitchState()
tableView.reloadData()
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "languageChoiceCell", for: indexPath)
cell.textLabel?.text = choices[indexPath.row]
if !checked[indexPath.row]
cell.accessoryType = .none
else if checked[indexPath.row]
cell.accessoryType = .checkmark
return cell
override func numberOfSections(in tableView: UITableView) -> Int
// #warning Incomplete implementation, return the number of sections
return 1
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
// #warning Incomplete implementation, return the number of rows
return choices.count
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
if checked[indexPath.row]
tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableView.ScrollPosition.none)
override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String?
return Constants.languagesFooterText
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
// If we are selecting a row that is already checked we do nothing
guard !checked[indexPath.row] else return
// Reset all checked state.
checked = [Bool](repeating: false, count: choices.count)
// And set the current row to true.
checked[indexPath.row] = true
if let cell = tableView.cellForRow(at: indexPath)
if cell.accessoryType == .checkmark
cell.accessoryType = .none
checked[indexPath.row] = false
else
cell.accessoryType = .checkmark
checked[indexPath.row] = true
updateSwitchState()
// did ** DE ** Select
override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
if let cell = tableView.cellForRow(at: indexPath)
if cell.accessoryType == .checkmark
cell.accessoryType = .none
checked[indexPath.row] = false
else
cell.accessoryType = .checkmark
checked[indexPath.row] = true
updateSwitchState()
func updateSwitchState()
let defaults = UserDefaults.standard
defaults.set(checked, forKey: "Language")
【问题讨论】:
【参考方案1】:您应该在页脚视图中设置高度。您可以通过调用tableView(:heightForFooterInSection:)
并返回UITableView.automaticDimension
来执行此操作。
由于您是从 UITableViewController
继承的,因此您可以通过以下方式进行操作
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat
UITableView.automaticDimension
这将为您提供以下结果:
【讨论】:
谢谢你这工作完美。奇怪的是,有些控制器需要它,有些则不需要。以上是关于SWIFT / UIKit 页脚文本显示在动态 tableViewCell 上的主要内容,如果未能解决你的问题,请参考以下文章