我正在UIProgressView
创建nib
。我想增加它的高度,但它固定为9.对于iPad
,我需要增加它的高度。怎么做?
提前致谢。
答案 0 :(得分:167)
使用CGAffineTransform更改尺寸:
CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 3.0f);
progressView.transform = transform;
答案 1 :(得分:80)
使用布局限制对我有用:
答案 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中使用。只需添加一个等于您希望进度条高度的高度约束。有关更多详细信息,请查看此类似问题的答案。
答案 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
通过代码或界面构建器设置框架。但是,您可能希望禁用动画或条纹。
以下是厚绿色进度条的代码:
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]];
答案 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)
答案 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)