动画约束,如何在所需方向增加高度

Posted

技术标签:

【中文标题】动画约束,如何在所需方向增加高度【英文标题】:Animate constraints, how to grow height in desired direction 【发布时间】:2019-02-19 09:06:26 【问题描述】:

我使用 SnapKit 根据触摸事件改变 UIView 的高度。因此,当用户触摸单元格时,它会展开。这样可以正常工作:

@objc func didRecieveTouch() 
    let originalHeight: CGFloat = 90
    let expandedHeight: CGFloat = 244

    if !expanded 
        self.snp.updateConstraints  make in
            make.height.equalTo(expandedHeight)
        
     else 
        self.snp.updateConstraints  make in
            make.height.equalTo(originalHeight)
        

    
    self.expanded = !self.expanded
    UIView.animate(withDuration: 0.25, animations: 
        self.superview?.layoutIfNeeded()
    )

问题是视图的增长方向对我来说看起来很奇怪和错误。视图实际上“跳”到新分配的空间并向上增长而不是向下增长,这是我想要的行为。

【问题讨论】:

能否请您添加您调用 didRecieveTouch 的代码的哪一部分。并添加一些有关 tableview 设置的信息。 【参考方案1】:

在动画块中添加您的代码。

UIView.animate(withDuration: 0.25) 
    if !expanded 
        self.snp.updateConstraints  make in
            make.height.equalTo(expandedHeight)
        
     else 
        self.snp.updateConstraints  make in
            make.height.equalTo(originalHeight)
       
    
    self.expanded = !self.expanded
    self.superview?.layoutIfNeeded()
 

【讨论】:

没有。我不知道 snap kit 是什么,但通常情况下,您会在动画块中更新约束和布局。由于他们制作了一个库来设置约束,我最好的猜测是你甚至不需要手动布局。他们应该在图书馆里这样做。 @desdenova 如果您不确定 SnapKit 问题是如何工作的,您为什么要回答它? github.com/SnapKit/SnapKit/issues/199

以上是关于动画约束,如何在所需方向增加高度的主要内容,如果未能解决你的问题,请参考以下文章

如何在不制作 IBOutlet 的情况下以编程方式在 Swift 中为 UIView 高度约束设置动画?

如何快速制作带有约束的动画?

如何添加约束以使视图的尺寸在方向改变时不会改变?

iOS如何激活/停用某个尺寸类(方向)的布局约束?

如何以编程方式增加具有约束的 UIScrollView 的高度?

如何获取TextFormField的高度