我正在尝试创建一个带有可扩展单元格的表格视图。单元格的两侧也有几个像素的偏移量,并且还设置了 shadowPath。
第一个问题是在单元格重新加载其高度和位置时,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
}
我将尝试尽快回复有关该主题的任何答案/问题。谢谢你。