可扩展的iOS tableViewCell

时间:2017-06-04 10:02:30

标签: ios swift uitableview

我有一个自定义的tableViewControlelr,它具有圆形卡片视图单元格。 tableViewCells也可以被点击,当点击时,它会扩展。

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        self.selectedIndex = indexPath
        self.didExpandCell()

    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if isExpanded && self.selectedIndex == indexPath{
            return 300
        }
        return 126

在我的tableviewcell中,我有一个白色的自定义视图,这是允许卡片视图外观并且它也是圆形的。单击单元格时,单元格是标准高度,如下所示: enter image description here

单击单元格后,它会展开,如下所示:enter image description here

正如您所看到的那样,当单元格未被单击时,底部是直的而不是圆形,我试图使用此代码使其圆整但不起作用。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cells", for: indexPath) as! ProfileTableViewCell

if TableView.rowHeight == 126 {

            cell.CustomView = UIView(frame: CGRect(x: 7, y: 8, width: 359, height: 20))

            return cell
        }
        else{

        }
}

3 个答案:

答案 0 :(得分:1)

问题可以通过在视图中取得测试标签来解决,当单元格展开从视图中移除半径时,使得视图不是单元格。     或者你可以设置特定的角半径,例如左上角,右上角,.bottomLeft,.bottomRight。

Use below example to set the corner radius

  let rectShape = CAShapeLayer()
    rectShape.bounds = self.myView.frame
    rectShape.position = self.myView.center
    rectShape.path = UIBezierPath(roundedRect: self.myView.bounds, byRoundingCorners: [.bottomLeft , .bottomRight , .topLeft], cornerRadii: CGSize(width: 20, height: 20)).cgPath

     self.myView.layer.backgroundColor = UIColor.green.cgColor
     self.myView.layer.mask = rectShape

答案 1 :(得分:0)

您的自定义视图始终是完全展开的高度,因为您从不做任何其他操作(至少按照您共享的代码)。

您尝试修复的原因不起作用是因为TableView.rowHeight是用于单元格的高度,如果您没有使用委托方法来确定单元格高度是什么并且您正在使用委托方法。 TableView.rowHeight将始终是您最初设置的内容,并且不会因单元格而异,因此它永远不会匹配(如果将其设置为126,则始终匹配)。

如果您想要获得效果,我建议您查看自动布局或自动调整大小蒙版,以便像单元格一样动态调整自定义视图大小。

答案 2 :(得分:0)

我解决了这个问题:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cells", for: indexPath) as! ProfileTableViewCell
if isExpanded && self.selectedIndex == indexPath {
            cell.CustomView.frame = CGRect(x: 7, y: 8, width: 359, height: 283)
        }
       else {
       cell.CustomView.frame = CGRect(x: 7, y: 8, width: 359, height: 116)
        }
}