如何增加UIProgressView的高度

时间:2010-08-09 05:34:34

标签: iphone cocoa-touch ipad uiprogressview

我正在UIProgressView创建nib。我想增加它的高度,但它固定为9.对于iPad,我需要增加它的高度。怎么做?

提前致谢。

23 个答案:

答案 0 :(得分:167)

使用CGAffineTransform更改尺寸:

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

答案 1 :(得分:80)

使用布局限制对我有用:

enter image description here

答案 2 :(得分:25)

放置此来源

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

答案 3 :(得分:12)

初始化后,只需在代码中设置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];

答案 4 :(得分:11)

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

在storyboard或xib中选择UIProgressView对象,选择Editor> Pin>高度。这将创建一个高度约束,并允许您在最左侧(“使用”)面板的“属性”检查器中更改其值。

答案 5 :(得分:10)

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

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

答案 6 :(得分:10)

斯威夫特3:

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

答案 7 :(得分:7)

<强> 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
    }
}

答案 8 :(得分:6)

您还可以使用AutoLayout实现相同的外观,并且可以在iOS 7.1中使用。只需添加一个等于您希望进度条高度的高度约束。有关更多详细信息,请查看此类似问题的答案。

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

答案 9 :(得分:6)

这是解决方案

您可以使用转换,但问题出现 - &gt;当您更改设备的方向时,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.

谢谢

答案 10 :(得分:5)

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

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

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

答案 11 :(得分:5)

您无法通过笔尖更改UIProgressView的高度。 如果要更改高度,则必须通过自定义绘制方法实现它。

答案 12 :(得分:4)

对于iOS 7及以上版本,我做了以下哪些(a)有效,(b)没有生成警告:

首先在故事板中将UIProgressView添加到我的View Controller。然后通过CTRL +将UIProgressView拖动到自身,将高度约束添加到UIProgressView。将使用默认值2创建约束。别这么说了。

现在更改高度在代码中向IBOutlet子类添加UIViewController,如下所示:

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

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

self.progressHeight.constant = 9;

这应该很适合你。

答案 13 :(得分:2)

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

enter image description here

通过代码或界面构建器设置框架。但是,您可能希望禁用动画或条纹。

以下是厚绿色进度条的代码:

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]];

enter image description here

答案 14 :(得分:2)

您可以实施一个类别(新文件 - 类别) 并在课程开头添加类别。 它也适用于iboutlet(笔尖/故事板)。

代码只是

@interface UIProgressView (heavyView)
@end

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

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

答案 15 :(得分:0)

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));
    }]];

答案 16 :(得分:0)

不是使用界面构建器,而是可以通过以编程方式向其添加约束来更改from wsgiref.simple_server import make_server import re import threading import urllib2 def webapp(environ, start_response): path = environ.get('PATH_INFO', '').lstrip('/') for regex, callback in urls: match = re.search(regex, path) if match is not None: environ['app.url_args'] = match.groups() return callback(environ, start_response) return not_found(environ, start_response) KEEP_RUNNING = True srv = make_server('localhost', 8081, webapp) def t_serve(): while KEEP_RUNNING: srv.handle_request() def main(): t = threading.Thread(target=t_serve) t.start() print 'Service is running.' t.join() def index(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return ['Service works'] def t_stop_service(): print 'Service shutdown' urllib2.urlopen('http://localhost:8081/') def stop_service(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) global KEEP_RUNNING KEEP_RUNNING = False threading.Thread(target=t_stop_service).start() return ['Service is stopping'] def not_found(environ, start_response): """Called if no URL matches.""" start_response('404 NOT FOUND', [('Content-Type', 'text/html')]) return ['<h1>Not Found</h1>'] urls = [ (r'^$', index), (r'^stop/?$', stop_service) ] if __name__ == '__main__': main() 的高度。

UIProgressView

答案 17 :(得分:0)

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

Resized UIProgressView

答案 18 :(得分:0)

只需子类并调整内部大小:

class FatProgressView: UIProgressView {

    override var intrinsicContentSize: CGSize {
        return CGSize(width: UIView.noIntrinsicMetric, height: 20.0)
    }

}

答案 19 :(得分:0)

我们可以通过对UIProgressView进行子类化来创建ProgressView的自定义类,来设置UIProgressView的高度。

在Swift中,

public class ProgressView: UIProgressView {
    var height: CGFloat = 4.0
    public override func sizeThatFits(_ size: CGSize) -> CGSize {
        return CGSize(width: size.width, height: height) // We can set the required height
    }
}

答案 20 :(得分:0)

或者,可以通过编程方式实现布局高度。

customAlbId=1

答案 21 :(得分:0)

我只是在寻找同样的问题,并通过子类化 UIProgressView 和覆盖 sizeThatFits 方法让它工作,就像一个魅力。

class BigProgressView: UIProgressView {
    override func sizeThatFits(_ size: CGSize) -> CGSize {
        return CGSize(width: size.width, height: 5)
    }
}

答案 22 :(得分:-1)

<强>简单。斯威夫特4。

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