使用Autolayout动画UIView动画UITableView的复选标记

时间:2016-11-09 14:30:13

标签: ios swift uitableview uiview autolayout

我的行为很奇怪。我的整个视图控制器看起来像这样(垂直顺序):

  1. 的UILabel,
  2. 的UITableView,
  3. UIView(需要时会滑入& out)。 [见p.s。]
  4. 我在UIView和底部布局指南之间添加了约束,我用这种方法制作动画:

    func toggleContinueButton(_ toggleOn: Bool) {
        if toggleOn {
            self.buttonViewConstraint.constant = 0
        } else {
            self.buttonViewConstraint.constant = -80
        }
        UIView.animate(withDuration: 0.5) {
            self.view.layoutIfNeeded()
        }
    }
    

    由于一些奇怪的原因,这个螺丝勾选标记,现在从屏幕左边缘的外部“飞行”,并且右边进入所选单元格右侧的正确和预期位置。下面我有简单的选择/取消选择代码:

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.cellForRow(at: indexPath)!.accessoryType = .checkmark
        self.updateContinueButtonState()
    }
    
    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        tableView.cellForRow(at: indexPath)!.accessoryType = .none
        self.updateContinueButtonState()
    }
    

    有没有人见过这样的怪异?

    P.S。尝试了两个版本:第一,滑动UIView在tableView上面悬停在& out中,第二个是在UIView中滑动缩小tableView的高度。没有工作。

1 个答案:

答案 0 :(得分:0)

很难说,但您可以先尝试调用layoutIfNeeded,然后更改约束,然后再在动画块内调用它。这使得其他布局更改时间首先更新。