在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栏会重置比例。。为什么?哇,太对了。我在与变换和消失的圆角作斗争,但实际上这很简单;)只是遗憾的是故事板没有反映现实。