如何增加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中使用。 只需添加一个等于您想要的进度条高度的高度约束即可。 看看这个类似的问题上的这个答案更多的细节。
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,以适应其容器的边界。
简单。 斯威夫特4。
progressBar.transform = CGAffineTransform(scaleX:self.view.frame.width / progressBar.frame.width,y:self.view.frame.height / progressBar.frame.height)
- 如何使用performSelector:withObject:afterDelay:在Cocoa中的原始types?
- 如何将NSRange存储在NSMutableArray或其他容器中?
- 改变我的CALayer的anchorPoint移动视图
- UIGestureRecognizer是否在UIWebView上工作?
- 我如何添加一个标准的UIButton徽章?
- 界面生成器中的UIView边框颜色不起作用?
- 如何find两个CG点之间的距离?
- iOS 5的Twitter框架:Tweeting没有用户input和确认(模态视图控制器)
- 如何设置NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints?