SWIFT / UIKit 页脚文本显示在动态 tableViewCell 上

SWIFT / UIKit Footer text displaying over dynamic tableViewCell

我有一个只有两个单元格的 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")
        
    }
   
}

您应该在页脚视图中设置高度。您可以通过调用 tableView(:heightForFooterInSection:) 并返回 UITableView.automaticDimension.

来完成此操作

由于您是从 UITableViewController 继承的,因此您可以按以下方式进行

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    UITableView.automaticDimension
}

这将为您提供以下结果: