仅更改一个特定的 tableView 行高

Change only one specific tableView row height

我正在寻找一种方法来更改我的 tableView 中的特定行。

我正在使用通知来检查我何时在我的单元格中执行操作。根据答案,我的目标是显示下一行。

默认情况下,我的手机有这个 属性。

if (indexPath.row == 5){
    tableView.rowHeight = 0.0
}

if (indexPath.row == 6){
    tableView.rowHeight = 0.0
}

return cell

我在通知中的目标是更改第五行的行高值。

感谢您的帮助

您可以使用 Set<IndexPath> 和您的 tableView 委托方法来实现此目的。

假设您有一组选定的索引路径 selectedIndexPaths 和高度 largeHeightnormalHeight。您的 heightForRow 函数可能如下所示:

func tableView(_ tableView: UITableView, heigthForRowAt indexPath: IndexPath) -> CGFloat {
    guard !selectedIndexPaths.contains(indexPath) else {
        return largeHeight
    }

    return normalHeight
}

然后您可以通过以下方式动态更改高度:

/// Convenience method for selecting an index path
func select(indexPath: IndexPath, completion: ((Bool) -> Void)? = nil){
    selectedIndexPaths.insert(indexPath)
    tableView.performBatchUpdates({
        self.tableView.reloadRows(at: [indexPath], with: .none)
    }, completion: completion)
}

在您的 tableView 委托中,您可以在 didSelect:

中调用此方法
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    select(indexPath: indexPath)
}

如果您有响应通知的方法,请执行相同的操作(假设您将 indexPath 放在通知的 userInfo 中,在键 "indexPathKey" 下):

func notifiedShouldEnlargeRow(aNotification: Notification) {
    guard let indexPath = aNotification.userInfo["indexPathKey"] as? IndexPath else { return }
    select(indexPath: indexPath)
}

参考 performBatchUpdates(_:completion) and reloadRows(at:with:)