我正在尝试使用可扩展单元格创建表格视图。单元格也从两侧偏移几个像素并设置阴影路径。
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
}
我会尽快回答有关该主题的任何答案/问题。谢谢。