如何增加UIProgressView的高度

我正在从nib创buildUIProgressView 。 我想增加它的高度,但固定为9.对于iPad我需要增加它的高度。 如何做到这一点?

提前致谢。

您不能通过笔尖更改UIProgressView的高度。 如果你想改变高度,那么你必须通过自定义绘制方法来实现它。

使用CGAffineTransform来更改尺寸:

 CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 3.0f); progressView.transform = transform; 

使用布局约束为我工作:

在这里输入图像说明

放置这个来源

 @implementation UIProgressView (customView) - (CGSize)sizeThatFits:(CGSize)size { CGSize newSize = CGSizeMake(self.frame.size.width, 9); return newSize; } @end 

初始化后,只需在代码中设置UIProgressView的框架。 例如:

 UIProgressView *progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; // progressView's frame will be small/standard height progressView.frame = CGRectMake(0, 0, 100, 20); // Now the frame is set to my custom rect. 

这在iOS 5上工作。我使用自定义trackImage和progressImage。 我的代码看起来像这样。 请注意,我将progressView添加到另一个视图,并希望它与包含视图的大小相同,因此将框架设置为self.bounds。

 _progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; _progressView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; _progressView.trackImage = [[UIImage imageNamed:@"search-progress-track"] resizableImageWithCapInsets:UIEdgeInsetsMake(3.0f, 3.0f, 3.0f, 3.0f)]; _progressView.progressImage = [[UIImage imageNamed:@"search-progress"] resizableImageWithCapInsets:UIEdgeInsetsMake(3.0f, 3.0f, 3.0f, 3.0f)]; _progressView.frame = self.bounds; [_progressView setProgress:0.5]; 

有一个简单的方法来改变Interface Builder中的高度。 无需代码,您的更改将显示在IB中。

select故事板或xib中的UIProgressView对象,然后select“编辑器”>“针”>“高度”。 这将创build一个高度约束,并允许您在最左边(Utilizes)面板的属性检查器中更改其值。

以下代码适用于最新的swift xCode:

 var transform : CGAffineTransform = CGAffineTransformMakeScale(1.0, 6.0) progressView.transform = transform 

这是解决scheme

您可以使用变换,但是会出现以下问题 – >当您更改设备的方向时,UIProgressView高度会变成原来的一个。

所以增加UIProgressView高度的最好方法是

 yourProgressView.progressImage=[UIImage imageNamed:@"image1.png"]; yourProgressView.trackImage = [UIImage imageNamed:@"image2.png"]; // IMPORTANT: image1/image2 height (in pixel) = height that you want for yourProgressView. // no need to set other properties of yourProgressView. 

谢谢

您也可以使用AutoLayout来实现相同的外观,它可以在iOS 7.1中使用。 只需添加一个等于您想要的进度条高度的高度约束即可。 看看这个类似的问题上的这个答案更多的细节。

https://stackoverflow.com/a/19606981/142358

Swift 3:

 progressView.transform = progressView.transform.scaledBy(x: 1, y: 9) 

对于iOS 7及以上版本,我做了以下(a)工作和(b)不会产生警告:

首先将UIProgressView添加到故事板中的View Controller中。 然后通过CTRL +将UIProgressView拖拽到自身来为UIProgressView添加高度约束。 约束将以默认值2创build。 离开这一个人。

现在改变高度添加一个IBOutlet的代码UIViewController子类如下:

 @property (nonatomic, weak) IBOutlet NSLayoutConstraint *progressHeight; 

然后在你的代码中,可能是- viewDidLoad ,添加:

 self.progressHeight.constant = 9; 

这应该很好地为你工作。

对于iOS 7+,使用Core Graphics和CATransform3DScale在该视图中缩放图层:

 CATransform3D transform = CATransform3DScale(progressView.layer.transform, 1.0f, 3.0f, 1.0f); progressView.layer.transform = transform; 

只要确保设置progressView框架之后执行此操作,而不是之前。

这是允许设置高度的第三方进度条。 https://github.com/yannickl/YLProgressBar

在这里输入图像说明

通过代码或接口生成器设置框架。 不过,您可能要禁用animation或条纹。

这是一个厚厚的绿色进度条代码:

 YLProgressBar *bar = [[YLProgressBar alloc] initWithFrame:CGRectMake(0, 100, 100, 50)]; bar.progress = 0.5; bar.type = YLProgressBarTypeFlat; bar.hideStripes = YES; bar.behavior = YLProgressBarBehaviorDefault; bar.progressTintColors = @[[UIColor greenColor], [UIColor greenColor]]; 

在这里输入图像说明

Swift3

 var transform : CGAffineTransform = CGAffineTransform(scaleX: 1.0, y: 6.0) progressBar.transform = transform 

附录

如果您正在使用IBDesignable类,则可以从故事板中对其进行调整:

 @IBInspectable var progressBarHeight: CGFloat = 2.0 { didSet { let transform = CGAffineTransform(scaleX: 1.0, y: progressBarHeight) self.progressView.transform = transform } } 

你可以实现一个类别(新的文件类别),只需在课程开始处添加类别即可。 它也适用于iboutlet(笔尖/故事板)。

代码只是

 @interface UIProgressView (heavyView) @end @implementation UIProgressView (heavyView) - (CGSize)sizeThatFits:(CGSize)size { CGSize newSize = CGSizeMake(size.width, 9); return newSize; } @end 

如果您只想为一个progressView应用更改,并且在类中有多个progressView,则可以使用子类。

Mayur的方法在iOS 7中运行良好,这是我的代码(使用UIImage + BBlock)

  CGFloat progressViewHeight = 5; [[UIProgressView appearance] setProgressImage:[UIImage imageForSize:CGSizeMake(1, progressViewHeight) withDrawingBlock:^{ CGContextRef context = UIGraphicsGetCurrentContext(); UIColor * colortoUse = [UIColor blueColor]; CGContextSetFillColorWithColor(context, [colortoUse CGColor]); CGContextFillRect(context, CGRectMake(0, 0, 1, progressViewHeight)); }]]; [[UIProgressView appearance] setTrackImage:[UIImage imageForSize:CGSizeMake(1, progressViewHeight) withDrawingBlock:^{ CGContextRef context = UIGraphicsGetCurrentContext(); UIColor * colortoUse = [UIColor progressViewBackgroundColor]; CGContextSetFillColorWithColor(context, [colortoUse CGColor]); CGContextFillRect(context, CGRectMake(0, 0, 1, progressViewHeight)); }]]; 

而不是使用界面生成器, UIProgressView的高度可以通过编程添加约束来改变。

 UIProgressView *progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; progressView.translatesAutoresizingMaskIntoConstraints = NO; CGRect frame = CGRectMake(100, 200, 200, 50); [self.view addSubview:progressView]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-y-[progressView(height)]" options:0 metrics:@{@"y": @(CGRectGetWidth(frame)), @"height": @(CGRectGetHeight(frame))} views:NSDictionaryOfVariableBindings(progressView)]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-x-[progressView(width)]" options:0 metrics:@{@"x": @(CGRectGetMinX(frame)), @"width": @(CGRectGetWidth(frame))} views:NSDictionaryOfVariableBindings(progressView)]]; 

我的build议是在自动布局的视图控制器的视图放置一个容器视图。 确保它是你想要的进度条的大小。 现在在容器中拖动一个进度视图,并将所有的边都固定在容器的边界上。 您应该立即看到进度视图resize,以适应其容器的边界。

调整UIProgressView

简单。 斯威夫特4。

progressBar.transform = CGAffineTransform(scaleX:self.view.frame.width / progressBar.frame.width,y:self.view.frame.height / progressBar.frame.height)