UIProgressView setProgress 动画搞砸了

Posted

技术标签:

【中文标题】UIProgressView setProgress 动画搞砸了【英文标题】:UIProgressView setProgress animation is messed up 【发布时间】:2016-12-20 22:39:04 【问题描述】:

由于某种原因,UIProgressView.setProgress(1, animate: true) 导致出现混乱的动画。下图显示了问题。首先,它从中心向外动画,并从略高于其实际位置的位置开始。

这是包含 UIProgressView 的完整视图控制器代码

import UIKit

class ViewController: UIViewController 

    @IBOutlet weak var progressBar: UIProgressView!

    override func viewDidLoad() 
        super.viewDidLoad()
        progressBar.setProgress(1, animated: true)
    

【问题讨论】:

我不明白怎么回事 如果等到视图完全加载怎么办?通过在viewDidAppear中调用progressBar.setProgress(1, animated: true) 框架在viewDidLoad中设置不正确;等到viewDidAppearviewDidLayoutSubviews。如果您的进度视图具有固定宽度,您也可以解决此问题。 感谢 Randy 和 Paulw11,这确实是问题所在。它需要在 viewDidLoad 中而不是在 viewDidAppear 中调用 可以确认。与 viewDidAppear 或 viewDidLoad 均不相关 【参考方案1】:

问题是在 viewDidLoad 中调用了 setProgress,这搞砸了。它需要在视图完全加载后调用的另一个方法中调用,例如 Paulw11 和 Randy 建议的 viewDidAppear

【讨论】:

【参考方案2】:

这里的问题是,您要在视图加载完成之前设置进度视图。 您可以使用layoutIfNeeded() 方法在设置进度之前强制“构建”进度视图。

override func viewDidLoad() 
    super.viewDidLoad()
    progressBar.layoutIfNeeded()
    progressBar.setProgress(1, animated: true)

【讨论】:

以上是关于UIProgressView setProgress 动画搞砸了的主要内容,如果未能解决你的问题,请参考以下文章

UIProgressView 约束问题

UIProgressView

UI第九节——UIProgressView

改变 UIProgressView 的位置?

如何在 UIToolbar 中的 UIProgressView 上方添加标签?

如何使 UITableViewCell 上的 UIProgressView 立即更改?