Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift中更改视图的高度_Swift_Uiprogressview - Fatal编程技术网

在Swift中更改视图的高度

在Swift中更改视图的高度,swift,uiprogressview,Swift,Uiprogressview,我一直在尝试改变进度视图的大小和旋转,以适应屏幕的大小。它基本上会在手机屏幕上产生填充玻璃的效果 我用旋转器旋转它,几乎没有伤害 self.masteryProgress.transform=cgfaffinetransformmakerotation((CGFloat(-90)/CGFloat(180.0)*CGFloat(M_PI))) 我使用view.bounds获取包围屏幕的视图的大小,尝试获取rect和width x height。所以我没有被困在那里 我尝试使用.frame.draw

我一直在尝试改变进度视图的大小和旋转,以适应屏幕的大小。它基本上会在手机屏幕上产生填充玻璃的效果

我用旋转器旋转它,几乎没有伤害
self.masteryProgress.transform=cgfaffinetransformmakerotation((CGFloat(-90)/CGFloat(180.0)*CGFloat(M_PI)))

我使用
view.bounds
获取包围屏幕的视图的大小,尝试获取rect和width x height。所以我没有被困在那里

我尝试使用
.frame
.drawRect
,但当我使用它们时,它要么破坏它们,要么什么也不做

在interfaceBuilder中,“高度”属性似乎被锁定为常量值2

在创建自定义动画之前,有什么解决方案吗

我试着在interfaceBuilder中设置进度条的高度,就像其他一些帖子所说的那样,但是我需要让进度视图填满整个屏幕,无论它运行在什么设备上,这样解决方案在我的情况下都不会起作用

我最终使用了
CGAffineTransformScale(masteryProgress.transform,view.bounds.height/1334,(view.bounds.width/2))


因为我垂直旋转progressView,所以我将progressView的宽度设置为1334(iPhone 6 Plus的高度),高度设置为2。通过将屏幕高度除以这些值,它可以完美地调整任何手机的大小。

您可以通过如下方式设置其变换来缩放屏幕:

Swift 2

masteryProgress.transform = CGAffineTransformScale(masteryProgress.transform, 1, 20)
Swift 3、4

masteryProgress.transform = masteryProgress.transform.scaledBy(x: 1, y: 20)

这将起作用:

masteryProgress.transform = CGAffineTransformMakeScale(1, 4)

转变似乎仍然是实现这一目标的唯一途径尝试将其添加为UIProgressView的扩展,就像这样

extension UIProgressView {

    @IBInspectable var barHeight : CGFloat {
        get {
            return transform.d * 2.0
        }
        set {
            // 2.0 Refers to the default height of 2
            let heightScale = newValue / 2.0
            let c = center
            transform = CGAffineTransformMakeScale(1.0, heightScale)
            center = c
        }
    }   
}

我也有同样的经历

在缩放进度条后使用

CGAffineTransformMakeScale(1.0, 5.0)

条形图动画将从左上角填充到右下角。

如果使用Interface Builder添加UIProgressView,只需创建高度约束并更改为所需的值即可。就是这样。

在Swift 3中,它被更改为cGraffeTransform(scaleX:CGFloat,y:CGFloat)。所以代码应该是:

masteryProgress.transform = CGAffineTransform(scaleX: 1, y: 4)

在Swift版本3.0.2中,使用以下内容:

masteryProgress.transform = masteryProgress.transform.scaledBy(x: 1, y: 5)

我在将
UIProgressView
设置为round-rect视图时遇到了问题。而仅使用变换

masteryProgress.transform = CGAffineTransformMakeScale(1, 4)
我达到了,这不是我的最终要求

而我最后的期望是这样的

我最终通过以下两个步骤实现了它

1。从界面生成器设置高度约束:

    override func layoutSubviews() {
        super.layoutSubviews()

        let maskLayerPath = UIBezierPath(roundedRect: bounds, cornerRadius: 4.0)
        let maskLayer = CAShapeLayer()
        maskLayer.frame = self.bounds
        maskLayer.path = maskLayerPath.cgPath
        layer.mask = maskLayer
    }

2。创建
UIProgressView
的自定义类,并覆盖
func layoutSubviews()
以添加自定义遮罩层:

    override func layoutSubviews() {
        super.layoutSubviews()

        let maskLayerPath = UIBezierPath(roundedRect: bounds, cornerRadius: 4.0)
        let maskLayer = CAShapeLayer()
        maskLayer.frame = self.bounds
        maskLayer.path = maskLayerPath.cgPath
        layer.mask = maskLayer
    }
这是最后的结果


UIProgressView
放在
UIStackView
中,并设置
UIStackView
的约束也可能起作用。至少为我工作过

对“Sauvik Dolui”回答的一些修改:

在UIBezierPath中,您应该设置拐角半径:like(self.frame.height/2)。 这是比使用(4.0)更通用的解决方案


我尝试了Swift 5的公认答案,在progressView的底部钉了一个标签,标签被奇怪地拉长了。为了在没有任何其他问题的情况下更改高度,我使用了
heightAnchor
将其设置为我想要的高度

1-创建一个编程的
UIProgressView

lazy var progressView: UIProgressView = {
    let progressView = UIProgressView(progressViewStyle: .default)
    progressView.translatesAutoresizingMaskIntoConstraints = false
    progressView.trackTintColor = .white
    progressView.progressTintColor = .green
    progressView.progress = 0
    return progressView
}()
2-设置
heightAnchor
约束:

progressView.heightAnchor.constraint(equalToConstant: 12).isActive = true 

progressView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
progressView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 20).isActive = true
progressView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -20).isActive = true
这对我很有用:

progress.transform=progress.transform.scaledBy(x:1,y:self.bounds.size.height)


self.bounds.size.height”是您想要的高度

我给了它高度限制,它对我有效。我给它10个常数。但是如果你正在创建一个通用应用程序,你也可以使用乘数。

可能重复的Plesae检查前面的问题。自动布局方式也可以应用于故事板。@WonjugKim这很好,但我需要它来调整屏幕大小,界面生成器只允许静态调整大小。我以前使用过CGAffineTransformMakeScale。谢谢您好,我正试图使用这个代码为我的酒吧,但不幸的是我的填补对角线。。。有什么想法吗?如果你能看看@Bannings hi。。。当我对progressview使用CGAffineTransform并将iphone置于横向模式时,progressview栏会重置比例。。为什么?哇,太对了。我在与变换和消失的圆角作斗争,但实际上这很简单;)只是遗憾的是故事板没有反映现实。