视图在第二个动画之前跳

时间:2019-04-05 23:02:51

标签: ios swift nslayoutconstraint

我正在尝试对表格视图进行动画处理,使其看起来像下拉菜单,但该视图看起来还不错(尽管我更喜欢从上到下显示,当前从中间显示),问题是当我点击按钮将其关闭时表格视图又跳了一次,然后消失了,然后按此按钮则什么也不做。再次点击按钮后出现约束错误。

这就是在点击按钮时所需要的:

    let height: CGFloat = tableViewOpen ? 0 : 300

    UIViewPropertyAnimator(duration: 0.5, curve: .linear, animations: {
        self.tableView.set(height: height)
        self.tableView.layoutIfNeeded()
    }).startAnimation()

    tableViewOpen = !tableViewOpen

我对tableView的约束是使用我工作的公司的一些扩展设置的,但看起来像这样:

 tableView.pin(.top, to: .bottom, of: breedButton)
 tableView.pin(toSuperview: [.leading, .trailing])
 tableView.set(width: 250)

更多详细信息-表视图位于子视图控制器中,而子视图控制器只是品种按钮和表视图。子视图控制器约束设置如下:

    filterViewController.view.pin(.top, to: .top, of: titleLabel)
    filterViewController.view.pin(toSuperview: .leading)
    filterViewController.view.set(width: 250)

没有为tableview或childVC设置高度,不确定是否是问题所在。

点击第二个按钮后的约束错误:

(
    "<NSLayoutConstraint:0x600003e53a20 UITableView:0x7fe090829000.height == 300   (active)>",
    "<NSLayoutConstraint:0x600003e2c050 UITableView:0x7fe090829000.height == 0   (active)>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600003e53a20 UITableView:0x7fe090829000.height == 300   (active)>

enter image description here

1 个答案:

答案 0 :(得分:2)

问题很明显,您在每个按钮单击此处都设置了高度限制

 self.tableView.set(height: height)

但是您应该使用一次创建高度约束

var tableHeight:NSLayoutConstraint!

并在viewDidLoad中进行设置,然后将其更改为常量

tableHeight.constant = show ? 300 : 0 
 UIViewPropertyAnimator(duration: 0.5, curve: .linear, animations: { 
     self.view.layoutIfNeeded()
 }).startAnimation()