【问题标题】:Progress view height in iOS 7iOS 7 中的进度视图高度
【发布时间】:2013-09-14 02:27:52
【问题描述】:

我想在 iOS 6 及以下版本中增加进度视图的高度,我正在使用外观方法进行此操作

  UIImage *progressImage = [[UIImage imageNamed:@"sliderbk-progress.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 5)];
[[UIProgressView appearance] setProgressImage:progressImage];

但现在在 iOS7 中此代码不起作用我什至尝试给出下面的代码但没有用。任何帮助都会有所帮助。谢谢

[[UIProgressView appearance] setFrame:CGRectMake(20, 100, 280, 100)];

【问题讨论】:

  • @Puneet NDA 与 stackoverflow 无关。顺便说一句,在 NDA 下的问题中没有任何内容。
  • @Puneet 确实如此,但是对 SO 没有强制执行 NDA(有关讨论,请参阅元数据)。 Beta 会使问题“过于本地化”(再次参见元数据)。在这种情况下,该问题不包含任何受 NDA 保护的内容(API 相同),并且可以从 iOS 6 体验安全地回答该问题,而不会破坏 NDA。仅仅因为它包含“iOS 7”字样而否决或关闭问题是愚蠢的。
  • 公平点@Sulthan,但问题本身说代码在iOS6中而不是在iOS7中工作,并且通过外观设置进度图像的代码在iOS6中工作。我没有写 NDA 只是因为我在里面看到了 iOS7。
  • 如何初始化 UIProgressView?

标签: iphone ios objective-c ios7 uiprogressview


【解决方案1】:

如果我对问题的理解正确,听起来您想增加 iOS7 中进度视图的高度,而您之前在 iOS6 中使用的代码不再有效。

我最近不得不解决一个类似的问题,我通过在 Interface Builder 的进度视图中添加一个约束并通过约束显式设置高度来做到这一点。此解决方案将需要使用自动布局,因此请确保您已将其打开。

显示:尺寸检查器上的“高度”属性在进度视图中明显变灰并且无法更改 - 但是我已经在进度视图本身上定义了一个约束并将约束的高度设置为 50 点,这其实体现在IB上。

据我所见,iOS6 进度条具有静态高度值,因此如果您还想支持 iOS6,则需要另一种方法。

【讨论】:

  • 我们是否可以在应用程序在 iOS7 和界面构建器中运行时通过取消选中自动布局从代码中添加它,以便它也可以在 ios5 上运行
  • 我设置了进度图像和跟踪图像。但是一旦我在情节提要上设置跟踪图像,情节提要看起来不错,但在模拟器下却出错了。我必须在代码中手动设置它以使其正确。进度视图样式也必须是 UIProgressViewStyleBar。
  • 如何在 Objective-C 代码中做到这一点?我不使用 Interface Builder / Storyboard / WYSIWYG 编辑器。
  • 可以工作,但给我一个关于错位视图的警告......无论如何要解决这个问题?
  • 还有其他人发现 UIProgressView 在拉伸时两侧呈锥形吗?几乎好像有一个微小的错位,当它向上伸展时会变得更加突出。
【解决方案2】:

而其他人报告说 CGAffineTransform() 也可以工作:

[self.progressView setTransform:CGAffineTransformMakeScale(1.0, 3.0)];

【讨论】:

  • 我就是这样做的。此外,即使您没有打开自动布局,此方法也有效。
  • 很好的解决方案,因为 CGAffineTransform 数据结构表示用于仿射变换的矩阵。基本上 CGAffineTransformMakeScale 需要两个参数:缩放 x 轴和 y 轴的因子,当然高度是 y 轴参数。
【解决方案3】:

已经在这里回答了 How to increase height of UIProgressView

@implementation UIProgressView (customView)

- (CGSize)sizeThatFits:(CGSize)size 
{
   CGSize newSize = CGSizeMake(self.frame.size.width,9);
   return newSize;
}

@end

【讨论】:

    【解决方案4】:

    这里是 Swift 版本的 user3189408 和 Rushabh 为像我这样的新开发人员和 swift 爱好者提供的出色解决方案。已针对 iOS 7+/Swift 2.0 测试。

        progressView.transform = CGAffineTransformMakeScale(1.0, 5.0)
    

    【讨论】:

      【解决方案5】:

      斯威夫特 3.x

      progressView.transform = CGAffineTransform(scaleX: 1.0, y: 5.0)
      

      【讨论】:

      • storyboard 的自动布局解决方案也很有魅力。谢谢!
      【解决方案6】:

      你可以注意到frame不能被appearance访问器设置。您必须在每个进度视图上单独设置它。

      通常根据进度条样式设置高度。

      - (id)initWithProgressViewStyle:(UIProgressViewStyle)style; // sets the view height according to the style
      

      【讨论】:

        【解决方案7】:

        如果您使用的是自动布局,那么解决方案很简单:按照此处的答案之一创建高度约束。

        但是,您可能会在这里,因为您正在代码中创建进度条。

        在这种情况下,如果视图有圆角,通过transform 方法解决这个问题并不理想,因为CGAffineTransform 会弄乱角半径的绘制方式。

        我会将UIProgressView 子类化如下:

        class ProgressBarThick: UIProgressView {
            
            var height : CGFloat = 12
            var width: CGFloat = 0.0
            
            override func sizeThatFits(_ size: CGSize) -> CGSize {
                return CGSize(width: width,
                              height: height)
            }
        }
        

        在绘制视图之前设置高度和宽度。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-01
          • 1970-01-01
          • 2013-07-12
          • 2014-03-01
          相关资源
          最近更新 更多