调整 TableView 动态内容的行数

Posted

技术标签:

【中文标题】调整 TableView 动态内容的行数【英文标题】:Adjust row count for TableView dynamic content 【发布时间】:2018-05-29 23:29:13 【问题描述】:

我有一个包含 3 个 TableCells 的页面(底部的图片):第一个单元格填充了来自 Firebase 的动态加载内容,用于填充我的 userModel 数组中的个人资料图片、用户名和观看分钟数。我在为表格设置numberOfRowsInSection 时遇到问题,因为第一个单元格是动态的。

当我尝试计算单元格的数量时,我加了 2,因为我知道我需要显示两个静态单元格(商品单元格和注销单元格)。但由于userModel.count 从 0 开始,应用程序会由于在填充 userModel.count 数组之前对动态内容进行行索引而崩溃:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return userModel.count + 2


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        if indexPath.row == 0 
            let cell = tableView.dequeueReusableCell(withIdentifier: "leaderboardCell", for: indexPath) as! LeaderboardCell
            cell.profileImage.image = userModel[indexPath.row].photo
            cell.profileImage.layer.cornerRadius = cell.profileImage.frame.size.width/2
            cell.userName.text = userModel[indexPath.row].username
            cell.watchTime.text = userModel[indexPath.row].watchTime
            cell.profileLeaderboardContainer.layer.cornerRadius = 3.0
            return cell
         else if indexPath.row == 1 
            let cell = tableView.dequeueReusableCell(withIdentifier: "merchCell", for: indexPath) as! MerchCell
            return cell
         else 
            let cell = tableView.dequeueReusableCell(withIdentifier: "logoutCell", for: indexPath) as! LogoutCell
            cell.logoutButton.layer.cornerRadius = 3.0
            return cell
        

应用在以下位置崩溃:

cell.profileImage.image = userModel[indexPath.row].photo

这完全有道理,因为在将任何数据加载到该模型之前,没有 2 的索引位置。但我的问题是如何防止第一个表格单元格中的动态数组出现这种错误?谢谢!

P.S 如果我的行数只是 return userModel.count 顶部单元格加载动态内容时完全正常,但其他两个单元格根本不加载(这是有道理的,因为数组内的计数为 0)所以索引1和2不显示

【问题讨论】:

【参考方案1】:

你可以这样做:

if userModel.count > indexPath.row 
    cell.profileImage.image = userModel[indexPath.row].photo
 else 
    cell.profileImage.image = nil //or whatever default value

或者如果 userModel 是可选的:

if let count = userModel?.count, count > indexPath.row 
    cell.profileImage.image = userModel[indexPath.row].photo
 else 
    cell.profileImage.image = nil //or whatever default value

【讨论】:

以上是关于调整 TableView 动态内容的行数的主要内容,如果未能解决你的问题,请参考以下文章

如何动态调整tableheaderview的高度

el-table返回行数

调整视图的高度以包含表格视图的行数

ORA-00903,ORA-06512,同时计算所有用户表的行数(动态 sql)

调整大小后 UITableView 混乱 | Objective-C

tableView 编辑委托方法不起作用(无效更新:第 0 节中的行数无效)