仅更改一个特定的 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
和高度 largeHeight
和 normalHeight
。您的 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:)。
我正在寻找一种方法来更改我的 tableView 中的特定行。
我正在使用通知来检查我何时在我的单元格中执行操作。根据答案,我的目标是显示下一行。
默认情况下,我的手机有这个 属性。
if (indexPath.row == 5){
tableView.rowHeight = 0.0
}
if (indexPath.row == 6){
tableView.rowHeight = 0.0
}
return cell
我在通知中的目标是更改第五行的行高值。
感谢您的帮助
您可以使用 Set<IndexPath>
和您的 tableView 委托方法来实现此目的。
假设您有一组选定的索引路径 selectedIndexPaths
和高度 largeHeight
和 normalHeight
。您的 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:)。