iOS 7中UIProgressView显示问题

8

我需要在iOS7应用中,将UIProgressView作为UITableView单元格的一部分。我已经按照以下方式从代码中在单元格的右侧添加了UIProgressView:

_progressBar = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
_progressBar.translatesAutoresizingMaskIntoConstraints = NO;
[self.contentView addSubview:_progressBar];

[self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:_progressBar attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]];
[self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:_progressBar attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeRight multiplier:1.0 constant:-10.0]];
[_progressBar addConstraint:[NSLayoutConstraint constraintWithItem:_progressBar attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:60.0]];
[_progressBar addConstraint:[NSLayoutConstraint constraintWithItem:_progressBar attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:12.0]];

然而,显示UIProgressView有点奇怪。当进度为零时,UIProgressView对象看起来像这样:enter image description here。当我将进度值设置为0.5时,UIProgressView在左侧变成矩形,在右侧保持圆角矩形:enter image description here。当我将进度设置为0.98时,它看起来像这样:enter image description here。有没有办法通过简单地设置进度值来填充UIProgressView,并且元素的圆角矩形(或矩形)形式始终保持?或者在不添加自定义图形或覆盖UIProgressView的情况下,这是不可能的吗?提前感谢您的帮助。

我认为UIProgressView的高度是固定的。 - Gustaf Rosenblad
进度条的高度可以更改,最好使用CGAffineTransform来完成。 - Ilario
2个回答

19

今天遇到了同样的问题,解决方法并不难 :)

在界面构建器中添加一个与UIProgressView大小完全相同的UIView。将UIProgressView添加到此新UIView中。

如果您想要UIView带圆角,请按以下方式操作:

1)将cornerradius设置为高度的一半(例如,30px高进度条意味着15px圆角UIVIew)

myView.layer.cornerRadius = 15; 

2) 将蒙版设置为边界

myView.layer.masksToBounds = TRUE;

3) 设置裁剪边界,以便没有任何东西可以从UIView中溢出

myView.clipsToBounds = TRUE;

现在您拥有一个高度自定义的圆角UIProgressBar。

如果您不想要圆角,请按照同样的方式添加一个UIView,但只需将背景颜色更改为与UIProgressbar tracktint相同的灰色。

祝你好运!

-Sjoerd


更简单的方法:将 UIView 的背景更改为 clearColor - dehlen
1
clipsToBoundsmasksToBounds不是一样的吗?https://dev59.com/InM_5IYBdhLWcg3w43pt - Hai Feng Kao

5

供将来参考:我通过设置角半径解决了这个问题,方法如下:

  _progressView.layer.cornerRadius = 2.0;

接下来:

  _progressView.clipsToBounds = YES;

不需要为UIProgressView创建容器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接