为什么每次点击 UITextField 时都会调用 viewDidLayoutSubviews



我有一个viewController,里面有一个view,里面有四个UITextFields。我正在尝试做的是在加载视图控制器后立即对视图进行动画处理。

加载控制器时,动画按照我想要的方式工作,但由于某种原因,每次我点击任何UITextFields时都会调用viewDidLayoutSubviews因此它会一直为视图设置动画。

这是正常行为吗,每次点击TextField时都应该调用viewDidLayoutSubviews吗?

这是我的代码:

class MyViewController: UIViewController{
    @IBOutlet weak var viewAlertContainer: UIView!
    override func viewDidLayoutSubviews() {
        showAlertViewWithAnimation()
    }
    func showAlertViewWithAnimation(){
        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 2, options: .curveEaseIn, animations: {
            self.viewAlertContainer.frame.origin.y = 150
        })
    }
}

每当 Auto Layout 认为它有工作要做时,就会调用viewDidLayoutSubviews(),这可能会在您意想不到的时候发生。 这使得执行一次发生的操作是一个糟糕的选择。

将动画移动到 viewDidAppear() 的覆盖。 这是您第一次知道视图能够被看到,因此是执行动画的合适位置。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    showAlertViewWithAnimation()
}

最新更新