Swift - UIScrollView 滚动动画在 viewDidLoad() 中不起作用
Swift - UIScrollView scroll animation not working in viewDidLoad()
我正在开发一个使用 Storyboard 和 Xcode 12.3 的应用程序,我需要在视图加载到屏幕上之后以及用户 returns 从此视图的另一个视图控制器。在我看来,如果我从 viewDidLoad() 函数内或从展开 segue 时调用的函数滚动视图,动画将不起作用。相反,视图出现在屏幕上(在这两种情况下),滚动视图已经在相应位置滚动。本质上,最终结果已经实现,但滚动动画似乎被忽略或未执行。
有人可以帮忙解决这个问题吗?
这是我在这两种情况下演示问题的简单代码:
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)
}
非常感谢。
需要在viewDidAppear中使用
你应该google“查看控制器生命周期”
var isFirst = true
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if isFirst {
isFirst = false
scrollView.setContentOffset(CGPoint(x: xOffset, y: yOffset), animated: true)
}
}
我正在开发一个使用 Storyboard 和 Xcode 12.3 的应用程序,我需要在视图加载到屏幕上之后以及用户 returns 从此视图的另一个视图控制器。在我看来,如果我从 viewDidLoad() 函数内或从展开 segue 时调用的函数滚动视图,动画将不起作用。相反,视图出现在屏幕上(在这两种情况下),滚动视图已经在相应位置滚动。本质上,最终结果已经实现,但滚动动画似乎被忽略或未执行。
有人可以帮忙解决这个问题吗?
这是我在这两种情况下演示问题的简单代码:
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)
}
非常感谢。
需要在viewDidAppear中使用
你应该google“查看控制器生命周期”
var isFirst = true
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if isFirst {
isFirst = false
scrollView.setContentOffset(CGPoint(x: xOffset, y: yOffset), animated: true)
}
}