Swift - UIScrollView滚动动画在viewDidLoad()中不工作



我正在使用Xcode 12.3的Storyboard开发一个应用程序,我需要在视图加载到屏幕上之后以及当用户从另一个视图控制器返回到这个视图时动画滚动scrollView。在我看来,动画不工作,如果我从viewDidLoad()函数内滚动视图或从unwind segue时调用的函数。相反,视图出现在屏幕上(在这两种情况下),scrollview已经在各自的位置滚动。从本质上讲,最终结果是实现的,但滚动动画似乎被忽略或不执行。

谁能帮忙解决这个问题?下面是我的简单代码,演示了两个实例中的问题:

override func viewDidLoad {
super.viewDidLoad()
// ...
scrollView.setContentOffset(CGPoint(x: xOffset, y: yOffset), animated: true)
}

@IBAction func myUnwindAction(unwindSegue: UIStoryboardSegue) {
let segue = unwindSegue.source as! AnotherViewController
// ...
scrollView.setContentOffset(CGPoint(x: xOffset, y: yOffset), animated: true)
}

但是,如果我将滚动代码放在测试按钮的IBAction中,并在视图加载后单击该按钮,则视图将平滑地使滚动动画化,并且没有任何问题—下面是该函数的代码:

@IBAction func testButton(_ sender: Any) {
scrollView.setContentOffset(CGPoint(x: xOffset, y: yOffset), animated: true)
}

许多谢谢。

你需要使用in viewDidAppear

你应该谷歌一下"视图控制器生命周期">

var isFirst = true
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if isFirst {
isFirst = false
scrollView.setContentOffset(CGPoint(x: xOffset, y: yOffset), animated: true)
}
}

最新更新