动画下拉UIView时TableView单元格不改变高度
Posted
技术标签:
【中文标题】动画下拉UIView时TableView单元格不改变高度【英文标题】:TableView cell not changing height while animating dropdown UIView 【发布时间】:2020-02-05 16:23:17 【问题描述】:点击时我有一个 UIView 动画下拉菜单。我想要实现的是,当我点击 tableView 单元格时 UIView 高度也会自动跟随高度变化。这是我的代码
class SubjectCell: BaseCell
lazy var tableView: UITableView =
let tv = UITableView()
tv.delegate = self
tv.dataSource = self
tv.allowsSelection = false
return tv
()
extension SubjectCell: UITableViewDelegate
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return 80
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat
return UITableView.automaticDimension
// This is the view I want to animate
@IBOutlet weak var mainContainer: UIView!
@IBOutlet weak var calendarView: JKCalendar!
@IBOutlet weak var arrowImageView: UIImageView!
@IBOutlet weak var mainContainerHeightConstraint: NSLayoutConstraint!
override func awakeFromNib()
super.awakeFromNib()
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap))
mainContainer.addGestureRecognizer(tapGesture)
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
@objc func handleTap(gesture: UITapGestureRecognizer)
if mainContainerHeightConstraint.constant == 75
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 1, options: .curveEaseOut, animations:
self.arrowImageView.image = #imageLiteral(resourceName: "up-chevron")
self.mainContainerHeightConstraint.constant = 370
self.calendarView.alpha = 1
)
else
defaultConstraint()
fileprivate func defaultConstraint()
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 1, options: .curveEaseOut, animations:
self.arrowImageView.image = #imageLiteral(resourceName: "down-chevron")
self.mainContainerHeightConstraint.constant = 75
self.calendarView.alpha = 0
)
这是我对 uiview 的配置。
我将 mainContainerView 设置为顶部、前导和尾随 = 0。高度 = 370。
mainContainerView 内部有一个 stackView 包含另外 2 个视图,并在 mainContainerView 中设置我的堆栈视图顶部、尾随、底部和前导 = 0
这是我模拟器中的结果
我仍然不知道如何设置 tableViewCell 以便它会自动更改。请帮帮我:)
【问题讨论】:
我认为你应该开始删除 heightForRowAt 方法,现在它固定为 80 @Alastar 它不起作用我的 orangeView 在底部越来越多。 如果你用谷歌搜索可扩展的表格视图单元格,你会很快发现单元格不能以这种方式工作。您需要做的是在被点击的下方添加另一个单元格,或者具有可点击的部分标题而不是单元格 哦,我看到了@Vollan,所以我在 viewForHeaderInSection 中制作动画而不是在单元格中,对吗? @FerryAdiWijayanto Mo,您应该只选择 viewForHeaderImSection 并按下 。为此加载单元格。部分。那 。会给你你想要的设计 【参考方案1】:您需要设置mainContainerView
的底部约束,以便根据您的约束计算行高并删除heightForRowAt
函数。另一个是每次更改mainContainerView
的高度时都需要调用
tableView.beginUpdates()
tableView.endUpdates()
让它重新计算你的行的新高度,它将适用。
【讨论】:
以上是关于动画下拉UIView时TableView单元格不改变高度的主要内容,如果未能解决你的问题,请参考以下文章