我有一个可展开的单元格,其中包含顶部和底部UIView容器。当单元格展开时,底部容器可见。
顶部容器的圆角半径:topContainer.layer.cornerRadius = 12
当我展开单元格时,我想在顶部容器的左下角和右下角添加遮罩角。
我是这样做的:topContainer.layer.maskedCorners = [.layerMaxXMinYCorner, .layerMinXMinYCorner]
当单元格被折叠时,我想删除被遮罩的角:
我试着这样做:topContainer.layer.maskedCorners = []
不起作用。如何从UIView中删除被遮罩的角?
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let cell = tableView.cellForRow(at: indexPath) as? ExpandableProgramCell {
cell.setExpanded(false)
tableView.performBatchUpdates(nil)
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
if let cell = tableView.cellForRow(at: indexPath) as? ExpandableProgramCell {
cell.setExpanded(true)
tableView.performBatchUpdates(nil)
}
func setExpanded(_ expanded: Bool) {
if !expanded {
topContainer.layer.maskedCorners = [.layerMaxXMinYCorner, .layerMinXMinYCorner]
UIView.animate(withDuration: 0.3, delay: 0.0, options: .curveEaseInOut, animations: {
let upsideDown = CGAffineTransform(rotationAngle: .pi * -0.999)
self.arrowImageView.transform = upsideDown
self.bottomContainer.snp.remakeConstraints { make in
make.top.equalTo(self.topContainer.snp.bottom)
make.left.right.bottom.equalToSuperview()
}
})
} else {
topContainer.layer.maskedCorners = [] // - doesn't work
UIView.animate(withDuration: 0.3, delay: 0.0, options: .curveEaseInOut, animations: {
self.arrowImageView.transform = .identity
self.bottomContainer.snp.remakeConstraints { make in
make.top.equalTo(self.topContainer.snp.bottom)
make.left.right.equalToSuperview()
}
})
}
}
}
3条答案
按热度按时间elcex8rz1#
一些建议,你可能会发现有用的-特别是在未来...
首先,取代
func setExpanded(_ expanded: Bool)
,覆盖单元格的setSelected()
函数,让表格视图管理每个单元格的选定状态:现在,
didSelect
和didDeselect
看起来像这样:接下来,将单元格的所有子视图布局和属性设置移动到
init
,这样它们只设置一次,而不是每次调用cellForRowAt
时都设置一次。对于你的“圆角”,我把你的
mainContainer
的圆角...不再来回改变.maskedCorners
。并且,您创建了“expanded”和“collapsed”约束,因此在扩展/折叠单元格时使用它们。我们可以将该过程“简化”为:
下面是您的
ExpandableProgramCell
的修改版本--我尽可能地实现了与您的代码相匹配的内容,尽管我确信其中有些内容并不完全正确(但实际上应该不会有任何影响):其他
单元格类
和一个快速的视图控制器示例
llycmphe2#
我不久前写了这个扩展。也许来回设置值会起作用。
ef1yzkbh3#
最后,我找到了一个解决方案:https://developer.apple.com/forums/thread/727795
所以我们需要指定所有的角。