Swift:TableViewCell意外阴影行为

时间:2016-08-07 14:28:33

标签: swift uitableview animation tableviewcell shadowpath

我正在尝试使用可扩展单元格创建表格视图。单元格也从两侧偏移几个像素并设置阴影路径。

Example gif which I am referring to.

第一个问题是,当单元格重新加载其高度和位置时,shadowPaths没有正确设置动画。在高度/位置动画停止后,它是从无阴影到完全阴影的即时跳转。 (注意拍打的细胞)

第二个问题在您已经展开的情况下点击其他单元格时发生。第一个扩展单元格的shadowPath立即跳转到单元格的正常高度,同时单元格仍然为降低的高度设置动画。 (注意第一个扩展的细胞)

第三个错误并没有一直发生,也与阴影无关(我猜?)但是我在录制gif时设法捕获了它。当我第一次敲击而没有细胞扩张时,一个细胞就在上面的细胞下面。 (看看两个底部的细胞)

无论如何这里是自定义tableViewCell的代码:

override func awakeFromNib() {
    super.awakeFromNib()
    self.clipsToBounds = false
    self.layer.shadowOffset = CGSizeMake(1, 1)
    self.layer.shadowOpacity = 0.9
    self.layer.shadowColor = UIColor.blackColor().CGColor
    self.layer.shadowRadius = 2
    self.selectionStyle = .None
}

override var frame: CGRect {
    get {
        return super.frame
    }
    set {
        var tempFrame = newValue
        let inset: CGFloat = cellOffset
        tempFrame.origin.x += inset
        if previousFrame != tempFrame.size.width {
            tempFrame.size.width -= 2 * inset
            previousFrame = tempFrame.size.width
        }
        super.frame = tempFrame
    }
}

override func layoutSubviews() {
    super.layoutSubviews()
    let shPath: CGPathRef = UIBezierPath(rect: self.bounds).CGPath
    self.layer.shadowPath = shPath
}

TableView相关代码:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if let tempIndexPath = selectedCellIndexPath where tempIndexPath == indexPath {
        selectedCellIndexPath = nil
    } else {
        selectedCellIndexPath = indexPath
    }
    tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)

    tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: true)
}


func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if selectedCellIndexPath == indexPath {
        return 200
    }
    return 80
}

我会尽快回答有关该主题的任何答案/问题。谢谢。

0 个答案:

没有答案