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 上的主要内容,如果未能解决你的问题,请参考以下文章

如何停止正文内容显示在页脚内容及下方

如何使用 Swift 的逻辑动态显示图像和文本?

如何在 Swift UIKit 的 if 语句中显示多个警报?

RDLC页脚不显示visual studio 2008

jQuery:从动态模式显示静态文本

Swift:将 SwiftUI 元素添加到 UIKit 项目:无法正确应用约束