如何更改UITableViewCell的高度?

100*_*ols 3 cocoa-touch delegates uitableview ios swift

我试图让UITableViewCell在点击特定单元格时显示有关特定单元格的更多内容.一旦细胞膨胀并再次敲击,细胞应缩小回原始大小.

我敢肯定有东西要与代表们做了heightForRowAtIndexPathdidSelectRowAtIndexPath,但我不知道如何使用didSelectRowAtIndexPath方法来选择特定的表格单元格一行.

// Height of table cell rows
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 45
}

//On cell tap, expand
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    self.tableView.rowHeight = 75;
}
Run Code Online (Sandbox Code Playgroud)

此外,是否可以隐藏从父单元溢出的任何内容?有点像溢出:隐藏; 在CSS中.

Jog*_*Com 13

didSelectRowAtIndexPath中选择的tableview上声明一个全局变量NSInteger类型和存储,并在此处重新加载.在heightForRowAtIndexPath中检查行并在那里增加高度.试试这样

var selectedIndex : NSInteger! = -1 //Delecre this global 

 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if indexPath.row == selectedIndex{
        selectedIndex = -1
    }else{
        selectedIndex = indexPath.row
    }
    tableView.reloadData()
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if indexPath.row == selectedIndex
    {
        return 75
    }else{
        return 45
    }
}
Run Code Online (Sandbox Code Playgroud)


Fay*_*waz 5

您要做的是将所选单元格的索引保存在didSelectRow方法中。并且还必须开始/结束表视图上的更新。这将重新加载tableview的某些部分。并调用heightForRow方法。在该方法中,您可以检查是否选中了该行,然后返回expandedHeight,否则返回正常高度

行高:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    if self.selectedSortingRow == indexPath.row {
        return ExpandedRowHeight
    }
    else{
        return normalHeight
    }
}
Run Code Online (Sandbox Code Playgroud)

在didSelect行中:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    self.tableView.beginUpdates()
    selectedSortingRow = (int) indexPath.row        
    self.tableView.endUpdates()
}
Run Code Online (Sandbox Code Playgroud)


Ryd*_*pro 5

斯威夫特 4 回答与推荐评论。无需创建新变量,tableView 保存了 selectedRow indexPath 的值。

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        self.tableView.beginUpdates()
        self.tableView.endUpdates()
    }

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if self.tableView.indexPathForSelectedRow?.row == indexPath.row {
        return 75;
    } else {
    return 45;
    }
}
Run Code Online (Sandbox Code Playgroud)