为什么每次点击 UITextField 时都会调用 viewDidLayoutSubviews
Why is viewDidLayoutSubviews called everytime a UITextField is tapped
我有一个 viewController
,其中包含一个 view
,里面有四个 UITextFields
。我想要做的是在加载 ViewController 后立即为视图设置动画。
加载控制器时,动画按照我想要的方式工作,但由于某种原因,每次我点击任何 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
})
}
}
viewDidLayoutSubviews()
将在任何时候被调用 Auto Layout 认为它有工作要做,而且这可能会在您意想不到的时候发生。这使得执行一次发生的操作成为一个糟糕的选择。
将您的动画移至覆盖 viewDidAppear()
。这是您第一次知道可以看到视图,因此是执行动画的合适位置。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
showAlertViewWithAnimation()
}
我有一个 viewController
,其中包含一个 view
,里面有四个 UITextFields
。我想要做的是在加载 ViewController 后立即为视图设置动画。
加载控制器时,动画按照我想要的方式工作,但由于某种原因,每次我点击任何 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
})
}
}
viewDidLayoutSubviews()
将在任何时候被调用 Auto Layout 认为它有工作要做,而且这可能会在您意想不到的时候发生。这使得执行一次发生的操作成为一个糟糕的选择。
将您的动画移至覆盖 viewDidAppear()
。这是您第一次知道可以看到视图,因此是执行动画的合适位置。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
showAlertViewWithAnimation()
}