【发布时间】:2021-02-08 06:49:54
【问题描述】:
我正在使用带有 Xcode 12.3 的 Storyboard 开发一个应用程序,我需要在视图加载到屏幕上以及当用户从另一个视图控制器返回到该视图时立即为 scrollView 的滚动设置动画。在我看来,如果我从 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)
}
非常感谢。
【问题讨论】:
-
1.如果您想“滚动到某个区域”,请使用
scrollRectToVisible(:animated)。 contentOffset 是您的内容到滚动框架的偏移量,与“滚动”不同。 2. viewDidLoad 在 UIView 生命周期的早期被调用,你可以把它当作“viewDidBuild”。您至少应该瞄准“viewDidAppear”,即您的视图可见。
标签: swift uiscrollview