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

时间:2019-07-19 22:23:07

标签: ios swift uiviewanimation

我有一个viewController,其中包含一个view,其中包含四个UITextFields。我想做的就是在ViewController加载后立即对视图进行动画处理。

动画在加载控制器时按照我想要的方式工作,但是由于某些原因,每次我点击任何viewDidLayoutSubviews时都会调用UITextFields,因此它会不断为视图添加动画。

这是正常现象吗,是否每次敲击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
        })
    }
}

1 个答案:

答案 0 :(得分:3)

window.location.host会在 Auto Layout 认为有工作要做的任何时候被调用,这可能会在您意料之外的时间发生。这使得执行一次只发生一次的动作是一个糟糕的选择。

将动画移动到viewDidLayoutSubviews()的替代值。这是您第一次知道能够看到视图,因此是执行动画的合适位置。

viewDidAppear()
相关问题