微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UITableViewRows 不可见

如何解决UITableViewRows 不可见

我有一个简单的 UITableViewController 并且没有显示任何行。表视图标题和节标题都在那里。我从来没有遇到过这种情况。想法?

import UIKit

class DashboardTableViewController: UITableViewController {
    
    var countyName: String?
    var sections = ["Quota Over/Short","Qualified renewals","Membership Dues"]

    override func viewDidLoad() {
        super.viewDidLoad()
        
        if countyName != nil {
            self.title = "\(countyName!) County"
        } else {
            self.title = "County Info"
        }
        
        let headerView = DashboardCollectionView(frame: CGRect(x: 0,y: 0,width: tableView.frame.width,height: 200))
        tableView.tableHeaderView = headerView
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        return sections.count
    }
    
    override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
        if section == 0 {
            return 1
        } else if section == 1 {
            return 2
        } else {
            return 9
        }
    }
    
    override func tableView(_ tableView: UITableView,titleForHeaderInSection section: Int) -> String? {
        return sections[section]
    }
    
    override func tableView(_ tableView: UITableView,heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableView.automaticDimension
    }
    
    override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell")

        if cell == nil {
            cell = UITableViewCell(style: .default,reuseIdentifier: "UITableViewCell")
        }
        
        if #available(iOS 13.0,*) {
            cell?.textLabel?.textColor = .label
        } else {
            cell?.textLabel?.textColor = .black
        }
        cell?.textLabel?.font = UIFont(name: "HelveticaNeue-Regular",size: 25)
        cell?.textLabel?.numberOfLines = 2
        
        if indexPath.section == 0 {
            cell?.textLabel?.text = "-500"
        } else if indexPath.section == 1 {
            if indexPath.row == 0 {
                cell?.textLabel?.text = "PrevIoUs Year: 1500"
            } else {
                cell?.textLabel?.text = "Current Year: 1000"
            }
        } else {
            cell?.textLabel?.text = "Test Dues"
        }
        
        return cell!
    }
}

enter image description here

解决方法

您没有回答有关原型或基于代码的单元格类的问题,并且您显示的代码(在 cellForRowAt 中)不是使用表格视图单元格的正确方法。

在没有看到您的自定义单元设置的情况下,尝试使用“默认”单元:

class DashboardTableViewController: UITableViewController {
    
    var countyName: String?
    var sections = ["Quota Over/Short","Qualified Renewals","Membership Dues"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if countyName != nil {
            self.title = "\(countyName!) County"
        } else {
            self.title = "County Info"
        }
        
        // I don't have your DashboardCollectionView class,so I'm creating
        //  as plain UIView with a blue background
        //let headerView = DashboardCollectionView(frame: CGRect(x: 0,y: 0,width: tableView.frame.width,height: 200))
        let headerView = UIView(frame: CGRect(x: 0,height: 200))
        headerView.backgroundColor = .blue
        
        tableView.tableHeaderView = headerView
        
        // register a default UITableViewCell
        tableView.register(UITableViewCell.self,forCellReuseIdentifier: "defaultCell")
    }
    
    // MARK: - Table view data source
    
    override func numberOfSections(in tableView: UITableView) -> Int {
        return sections.count
    }
    
    override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
        if section == 0 {
            return 1
        } else if section == 1 {
            return 2
        } else {
            return 9
        }
    }
    
    override func tableView(_ tableView: UITableView,titleForHeaderInSection section: Int) -> String? {
        return sections[section]
    }
    
    //override func tableView(_ tableView: UITableView,heightForRowAt indexPath: IndexPath) -> CGFloat {
    //  return UITableView.automaticDimension
    //}
    
    override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        // don't do it like this
        //var cell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell")
        //if cell == nil {
        //  cell = UITableViewCell(style: .default,reuseIdentifier: "UITableViewCell")
        //}
        
        // dequeue a registered cell
        let cell = tableView.dequeueReusableCell(withIdentifier: "defaultCell",for: indexPath)
        
        if #available(iOS 13.0,*) {
            cell.textLabel?.textColor = .label
        } else {
            cell.textLabel?.textColor = .black
        }
        cell.textLabel?.font = UIFont(name: "HelveticaNeue-Regular",size: 25)
        cell.textLabel?.numberOfLines = 2
        
        if indexPath.section == 0 {
            cell.textLabel?.text = "-500"
        } else if indexPath.section == 1 {
            if indexPath.row == 0 {
                cell.textLabel?.text = "Previous Year: 1500"
            } else {
                cell.textLabel?.text = "Current Year: 1000"
            }
        } else {
            cell.textLabel?.text = "Test Dues"
        }
        
        return cell
    }

}

结果:

enter image description here

如果可行(它会),请尝试使用此代码找出自定义单元格不起作用的原因。

,

从图像上看,UITableView 为您的单元格分配了空间。我建议通过

测试电池
  1. 不要重复使用单元格只是为了看看是否可以显示某些内容 let cell = UITableViewCell(style: .default,reuseIdentifier: nil)
  2. 将背景颜色设置为某物 cell.backgroundColor = .red

如果您看到单元格出现,那么您至少知道 tableview 为您提供了正确的单元格数量

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。