如何增加UIProgressView的高度

Cha*_* SP 61 iphone cocoa-touch uiprogressview ipad

我创建UIProgressViewnib.我想增加它的高度,但它固定为9.因为iPad我需要增加它的高度.怎么做?

提前致谢.

小智 169

使用CGAffineTransform更改尺寸:

CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 3.0f);  
progressView.transform = transform;
Run Code Online (Sandbox Code Playgroud)

  • 使用缩放对其进行变换将使视图渲染变形. (9认同)
  • 这不适用于旋转设备. (7认同)
  • 这不适用于iOS 7!有任何想法吗? (2认同)

Log*_*gan 85

使用布局约束对我有用:

在此输入图像描述

  • 这太该死了.来吧苹果,为什么不把它变成公共财产呢?如果这很容易打破你的强迫高度.:) (14认同)
  • 为什么要downvote?这对我和至少另外一个人有用,所以如果有问题,我们也可能也想知道. (4认同)
  • 目前,使用XCode 7.2它会显示一个警告,进度视图框在运行时会有所不同,并且它不会消失 (4认同)
  • 喜欢这个解决方案 (2认同)
  • 不要看到这个被认为是hacky的东西,特别是与在代码中应用变换或设置帧相比. (2认同)

Sho*_*aib 26

放置这个来源

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

  • 实际上,该解决方案具有不良副作用.进度条的填充部分将是错误的.例如,我将我的进度设置为0.1(10%),但是好的第三个获得filles因为强制进度视图调整其高度似乎错误地调整了自己的进度子视图 (5认同)

orj*_*orj 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.
Run Code Online (Sandbox Code Playgroud)

这对我在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];
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于:1)您使用的是iOS 5.0+ 2)您正在使用自定义图像3)您在设置图像后设置了帧. (7认同)
  • 设置UIProgressView框架似乎在iOS 7中不起作用. (2认同)

Mat*_*att 11

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

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

  • @ kl94:您可以为约束创建一个出口并在运行时设置它.请参阅下面的答案. (2认同)

小智 11

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

var transform : CGAffineTransform = CGAffineTransformMakeScale(1.0, 6.0)
           progressView.transform = transform
Run Code Online (Sandbox Code Playgroud)


Moh*_*our 10

斯威夫特3:

progressView.transform = progressView.transform.scaledBy(x: 1, y: 9)
Run Code Online (Sandbox Code Playgroud)


Ami*_*a シ 7

Swift3

var transform : CGAffineTransform = CGAffineTransform(scaleX: 1.0, y: 6.0)
progressBar.transform = transform 
Run Code Online (Sandbox Code Playgroud)

附录

如果您正在使用IBDesignable课程,可以在故事板中使用它进行调整:

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


小智 6

这是解决方案

您可以使用转换,但问题出现 - >当您更改设备的方向时,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.
Run Code Online (Sandbox Code Playgroud)

谢谢


Ste*_*ser 6

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

/sf/answers/1372488701/


raa*_*aaz 5

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

  • 应该有一些更简单的方法! (24认同)

Mik*_*ato 5

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

CATransform3D transform = CATransform3DScale(progressView.layer.transform, 1.0f, 3.0f, 1.0f);
progressView.layer.transform = transform;
Run Code Online (Sandbox Code Playgroud)

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