iOS 7.1中的UIProgressView自定义跟踪和进度图像

时间:2014-03-10 21:19:04

标签: ios ios7 uiprogressview

iOS 7.1似乎打破了UIProgressView中的自定义图像属性。用于成功自定义进度视图的代码现在产生默认外观。

我设置了一个示例项目,在viewDidLoad中执行此操作:

self.progressView.frame = CGRectMake(self.progressView.frame.origin.x, self.progressView.frame.origin.y, self.progressView.frame.size.width, 9);
UIImage *img = [UIImage imageNamed:@"progress_bar_fill.png"];
img = [img resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)];
self.progressView.progressImage = img;

img = [UIImage imageNamed:@"progress_bar_empty.png"];
img = [img resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)];
self.progressView.trackImage = img;

我仍然得到默认外观。我已逐步完成并验证img是否符合预期的非零。发生了什么事?

更新:这里有一个OpenRadar,我还提交了一份我自己的雷达,并提供了一个样本项目。

更新2:如下面的Axy所述,你必须添加它以使JEProgressView正常工作:

_progressBar.tintColor = [UIColor clearColor];

8 个答案:

答案 0 :(得分:47)

这很烦人。如果没有子类化UIProgressView,我找不到解决方法。

无论如何,我在这里解决了这个问题:https://gist.github.com/JohnEstropia/9482567

您必须将UIProgressView的出现次数更改为JEProgressView,包括NIB和故事板中的出现次数。

基本上,您需要强制将图像直接分配给UIProgressView的孩子UIImageView

需要子类覆盖layoutSubviews,您可以根据图像大小调整imageViews的高度。

答案 1 :(得分:5)

你是对的。自从7.1首次出现在Xcode 5.1种子1中以来,这个错误一直存在。我为Xcode 5.1的所有5个种子提交(并重新提交)相同的错误,现在在Xcode 5.1上。但苹果没有解决它。

请提交此错误!如果你愿意,你可以参考我的错误:15547259。越多越好!我认为这是严重破坏,因为这意味着一个工作正常的应用程序现在已被破坏(如果它使用带有progressImage的进度视图)。

答案 2 :(得分:2)

我使用了John Estropia解决方案,但它显示了我的叠加蓝光色调条,具有相当奇怪的图形效果。

我添加了

_progressBar.tintColor = [UIColor clearColor];

并且它很好。谢谢你的解决方案。

答案 3 :(得分:2)

朋友们,我使用以下代码在我的应用程序中添加UIProgressView:

UIProgressView *progressView;
progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];      
progressView.progressTintColor[UIColor colorWithRed:187.0/255 green:160.0/255 blue:209.0/255 alpha:1.0];
[[progressView layer]setCornerRadius:10.0f];
[[progressView layer]setBorderWidth:2.0f];
[[progressView layer]setMasksToBounds:TRUE];
progressView.clipsToBounds = YES;
[[progressView layer]setFrame:CGRectMake(30, 295, 260, 25)];[[progressView     layer]setBorderColor[UIColor whiteColor].CGColor]; 
progressView.trackTintColor = [UIColor clearColor];
[progressView setProgress: (float)count/15 animated:YES];

希望代码对您有所帮助,我在此处找到了它:Source of Code

答案 4 :(得分:1)

我试图实现John Estropia的JEProgressView文件 - 但它不起作用。我一定做错了 - 但我对此有点新意。有人可以解释一下这是怎么做到的吗?我知道这可能是一个愚蠢的问题 - 但经过大量的谷歌搜索,我认为问是唯一的方法。

答案 5 :(得分:0)

我也抓住了这个bug。我尝试使用UIProgressView属性修复它但没有结果。上面发布的John的Estropia解决方案,对我来说也不起作用,也许它不支持自动布局,所以我制定了自己的临时解决方案来绕过这个bug。 https://github.com/ninjaproger/AKProgressView

答案 6 :(得分:0)

对我而言,这适用于iOS 7.1及更高版本的进度图像:

if ([[UIDevice currentDevice] systemVersion] >= 7)
    self.progressView.tintColor = [UIColor colorWithPatternImage:img];

答案 7 :(得分:0)

使用Xcode5,现在可以使用Interface Builder制作可调整大小的图像。我们可以指定调整大小方向和内容插入,并在界面构建器中选择要拉伸的区域。

要使用此功能,您可以使用Asset Catalog作为要调整大小的图像。 enter image description here enter image description here enter image description here enter image description here