【问题标题】:How to create Vertical Progress Bar - IOS - Swift如何创建垂直进度条 - IOS - Swift
【发布时间】:2018-10-04 20:32:59
【问题描述】:

我正在尝试创建一个垂直进度条。但问题是我的代码在 IOS11 或更高版本 上运行,但在 IOS9 上却无法运行。

IOS11 或更高版本上,它看起来像: enter image description here

但在 IOS9 上看起来像:enter image description here

我的代码:

let progressBar: UIProgressView = {
    let prgressView = UIProgressView()
    prgressView.progress = 0.7
    prgressView.progressTintColor = UIColor(red: 1.0, green: 0.21, blue: 0.33, alpha: 1)
    prgressView.trackTintColor = UIColor.blue
    prgressView.layer.cornerRadius = 6.5
    prgressView.clipsToBounds = true
    prgressView.transform = CGAffineTransform(rotationAngle: .pi / -2)
    prgressView.translatesAutoresizingMaskIntoConstraints = false
    return prgressView
}()

layoutSubview()

override func layoutSubviews() {
    super.layoutSubviews()

    let width = progressBar.bounds.width
    let height = progressBar.bounds.height

    progressBar.bounds.size.width = height
    progressBar.bounds.size.height = width
}

viewDidLoad()

    self.addSubview(progressBar)
    progressBar.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
    progressBar.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
    progressBar.widthAnchor.constraint(equalToConstant: 22.5).isActive = true
    progressBar.heightAnchor.constraint(equalToConstant: 250).isActive = true

我正在按照本教程创建垂直进度视图:https://www.youtube.com/watch?v=ifekgTtb0rQ&t=1070s

【问题讨论】:

  • 截至 2018 年 9 月 3 日,95% of devices are iOS10 or higher 所以.. 为什么要出汗?只需设置您的最低 iOS 版本即可。这不像Android,人们可以随意选择操作系统。一旦人们收到有新版本的通知,他们通常会安装它。而且没有回头路。

标签: ios swift uiprogressview


【解决方案1】:

通过对您发布的代码进行两项更改,我能够使您的代码在 iOS 9 和 iOS 12 下正常工作:

  1. 删除layoutSubviews。你已经设置了约束。也不要尝试直接修改视图的框架。
  2. 交换宽度和高度约束。如果您没有应用转换,请考虑进度条的大小。您希望宽度为 250,高度为 22.5。转换不会改变这一点。变换只是让它看起来高 250,但宽度仍然是 250。

简而言之,删除 layoutSubviews 并将您的约束修复为:

progressBar.widthAnchor.constraint(equalToConstant: 250).isActive = true
progressBar.heightAnchor.constraint(equalToConstant: 22.5).isActive = true

【讨论】:

  • 是的,我已经尝试过了,但是当我尝试应用一些 topAnchor 或 bottomAnchor 时,问题就出现了,锚点根据其高度开始,即 22.5
  • 这是意料之中的。同样,约束适用于没有变换的视图。所以如果你想让垂直进度条的“顶部”距离顶部40个点,你真的需要将约束设置为(width - height) / 2 + offset(250 - 22.5) / 2 + 40
  • 在这一点上,你已经超出了你原来的问题,因为这不是特定于任何 iOS 版本。
  • 谢谢,我试试这个
  • 你也可以override var intrinsicContentSize返回一个高度和宽度交换的CGSize。例如,CGSize(width: rotatedView.intrinsicContentSize.height, heigh: rotatedView.intrinsicContentSize.width)
【解决方案2】:

用 UIView 的角度属性为 transform 旋转进度条并不难

progressBar.transform = CGAffineTransform(rotationAngle: .pi / 2)

【讨论】:

  • progressBar* 而不是进度
  • 您可以使用edit 按钮修改您的答案,而不是发表评论。 :)
  • 哦,谢谢你,我正忙于编码,所以我看不到那个按钮 xD
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多