展開可能なセルを含むテーブル ビューを作成しようとしています。セルには、両側から数ピクセルのオフセットもあり、shadowPath も設定されています。
最初の問題は、セルがその高さと位置をリロードしている間、shadowPaths が適切にアニメーション化されないことです。高さ/位置のアニメーションが停止した後、影なしから完全な影に瞬時にジャンプします。(タップされたセルに注意)
2 つ目の問題は、セルが既に展開されているときに別のセルをタップすると発生します。最初に展開されたセルの shadowPath は、セルがまだ縮小された高さをアニメートしている間に、セルの通常の高さに即座にジャンプします。(最初の展開されたセルに注意してください)
3 番目のバグは常に発生するわけではなく、影とは関係ありませんが (おそらく?)、GIF の記録中になんとかキャプチャできました。どのセルも展開されていない状態で初めてタップすると、1 つのセルが上のセルの真下に移動しました。(下の 2 つのセルを見てください)
とにかく、カスタム 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
}
トピックに関する回答/質問にはできるだけ早く対応するようにします. ありがとうございました。