【问题标题】:UIProgressView corner radius changing when updating progress更新进度时 UIProgressView 角半径发生变化
【发布时间】:2020-12-18 04:21:22
【问题描述】:

我已经使用 layer.cornerRadius (0.2) 和 clipsToBounds (true) 设置了进度视图的角半径。但是,当我使用警报更新进度时,拐角半径会发生变化。如果我关闭并重新打开应用程序,圆角半径再次正确。

有人知道这里发生了什么吗?任何想法都会非常有帮助,谢谢!

【问题讨论】:

    标签: swift uialertview rounded-corners uiprogressview


    【解决方案1】:

    UIProgressView 有它自己的标准高度,并不是真的要改变。当您设置自定义约束时,您可能会破坏进度视图的原始约束。每次 UIProgressView 使用 layoutSubviews() 重新加载其布局并将其设置为当前高度的 50% 时,您的自定义角半径可能会被覆盖。

    我看到了这个问题的两个解决方案。

    1。自定义进度视图(首选)

    这将是一个首选,只需创建自定义进度视图,不用担心打破任何约束和改变角落!

    2。继续反击

    UIProgressView 可能会在调用 layoutSubviews() 时过度改变其角落,因此您可以尝试通过覆盖视图/单元格中的方法将其设置回您想要的值。

    override func layoutSubviews() {
        super.layoutSubviews()
        greenBar.layer.cornerRadius = 0.2
        redBar.layer.cornerRadius = 0.2
    }
    

    如果这还不够,请尝试不同的地方,例如 layoutIfNeeded()prepareForReuse() 等。

    作为对高度使用约束的替代方法,您可以进行变换,但进度条在侧面看起来有点滑稽。

    // x: 1 - keeps the dimention the same size 
    // y: 10 - makes the height 10x bigger
    greenBar.transform = CGAffineTransform(scaleX: 1, y: 10)
    

    第二个解决方案并不是一个好的建议,因为您会发现自己一直在与原始实施作斗争。 UIProgressView 不是按照您的使用方式设计的,所以我强烈建议,尝试解决方案 1 并实施您自己的视图,您可以在其中设置规则 :) 祝您好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多