【问题标题】:UIProgressView custom track and progress images in iOS 7.1iOS 7.1 中的 UIProgressView 自定义轨迹和进度图像
【发布时间】:2014-04-14 05:25:39
【问题描述】:

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

【问题讨论】:

  • 我不太喜欢修复(尽管它可能会起作用,而且我可能不得不使用它)。当这个问题正式修复时,我们如何知道/收到通知?
  • 我敢打赌它会在下一次 iOS 更新中得到修复。你会听到屋顶传来的叫喊声。

标签: ios ios7 uiprogressview


【解决方案1】:

这很烦人。如果不继承 UIProgressView,我找不到解决此问题的方法。

无论如何,我是这样解决这个问题的:https://gist.github.com/JohnEstropia/9482567

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

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

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

【讨论】:

  • 伟大的 googamooga,它成功了!我必须删除轨道和进度图像帧的 .origin.y 分配才能获得正确的位置,但除此之外它效果很好。
  • 我喜欢有人发布完整的修复实现。干得好。
【解决方案2】:

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

请也提交此错误!喜欢的可以参考我的bug:15547259,越多越好!我认为这是严重的损坏,因为这意味着一个运行良好的应用现在损坏了(如果它使用带有progressImage 的进度视图)。

【讨论】:

  • 为什么苹果一直无视这一点?
  • 截至今天(2014 年 10 月),该错误仍在 iOS 8 中。仍未修复。
  • 仍然在 iOS 8.1 中。
  • 它仍然出现在 iOS 8.4 中。
  • @RandyHill 但在 iOS 9 中已修复!
【解决方案3】:

我使用了 John Estropia 解决方案,但它显示了与我的叠加层的蓝色条,具有非常奇怪的图形效果。

我加了

_progressBar.tintColor = [UIColor clearColor];

一切顺利。感谢您的解决方案。

【讨论】:

  • 我必须做同样的事情。
  • 它不起作用,有趣的是,当您在情节提要中设置为 clearColor 并在调试期间它会恢复为灰色(在控制台中打印插座)但随后您将其设置为viewDidLoad to clearColor - 设置有效,但仍显示灰色。
【解决方案4】:

各位朋友,我已经使用以下代码在我的应用中添加了 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

【讨论】:

    【解决方案5】:

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

    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

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

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

      【讨论】:

        【解决方案8】:

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

        要使用此功能,您可以使用 Asset Catalog 来调整要调整大小的图像。

        【讨论】:

          猜你喜欢
          • 2014-02-27
          • 1970-01-01
          • 2011-12-20
          • 1970-01-01
          • 2021-02-09
          • 1970-01-01
          • 2012-11-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多