10

我知道这已经在这里被问了一百次了,但是我在其他问题中找不到合适的答案。

我的问题是我的UIProgressView的高度。虽然在 iOS6 中一切正常,但现在在 iOS7 中一切正常。

我尝试了以下方法:

  • 1.在drawRect-Method中设置自定义布局:

在 iOS6 中就像一个魅力,但在 iOS7 中,进度从一开始就设置为 100%,或者栏很薄。

  • 2.使用UIProgressView外观的progressImagetrackImage属性设置布局

也不能在 iOS7 下工作。这里的进度条也从一开始就设置为 100%。有些人写道,这种方式应该是可能的,但我无法确认对于 iOS7。

  • 3.使用initWithProgressStyle进行初始化,然后设置进度视图的框架

在 iOS6 和 iOS7 下不适合我。在 iOS7 中,这些条非常纤细。

对我来说,现在这很令人沮丧,因为这些条要么是 100%,要么是超细的。谁能给我一个建议,以达到我的进度视图的旧布局。我认为这必须是可能的,因为如果我在 iPhone(安装了 iOS7)上查看我的 Spotify 应用程序,进度视图看起来就像以前一样。

在此处输入图像描述

非常感谢!

4

4 回答 4

18

好吧,问题是 iOS6 UIProgressView 和 iOS7 UIProgressView 有不同的内部子视图结构的接缝。iOS6 进度视图是没有子视图(或一些次要视图)的单一视图,iOS7 进度视图很少有用于绘制进度条和背景的附加子视图。

如果您在 iOS7 上删除 UIProgressView 的所有子视图,那么 drawRect: 方法在 iOS6 上的工作方式与以前相同,但您将完全负责绘制进度视图内容,包括进度条和背景。

- (id) initWithCoder: (NSCoder*)aDecoder
{
    if(self=[super initWithCoder: aDecoder])
    {
            // Also you can setup height of your progress here
            // self.frame = CGRectMake(0,0,100,yourHeight);

        NSArray *subViews = self.subviews;
        for(UIView *view in subViews)
        {
            [view removeFromSuperview];
        }
    }
    return self;
}
于 2013-10-01T11:59:41.163 回答
4

我为这个问题做了一种解决方法。我希望有人可以为正常的 UIProgressView 给出一个很好的答案。

我写了一个带有圆角的 UIView 子类和一个里面的视图,它根据给定的进度改变它的大小。我只使用颜色作为背景,但图像也可以。这是代码:

#import "CustomProgressView.h"
#import <QuartzCore/QuartzCore.h>

@interface CustomProgressView ()

@property (nonatomic, retain) UIView *progressView;

@end

@implementation CustomProgressView

@synthesize progressColor,trackColor,progressView,progress;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.layer.cornerRadius = 5;
        // clipsToBounds is important to stop the progressView from covering the original view and its round corners
        self.clipsToBounds = YES;

        self.progressView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, frame.size.height)];
        [self addSubview:self.progressView];
    }

    return self;
}

-(void)setProgressColor:(UIColor *)theProgressColor {
    self.progressView.backgroundColor = theProgressColor;
    progressColor = theProgressColor;
}

-(void)setTrackColor:(UIColor *)theTrackColor {
    self.backgroundColor = theTrackColor;
    trackColor = theTrackColor;
}

-(void)setProgress:(float)theProgress {
    progress = theProgress;
    CGRect theFrame = self.progressView.frame;
    theFrame.size.width = self.frame.size.width * theProgress;
    self.progressView.frame = theFrame;
}
@end
于 2013-09-24T12:04:31.820 回答
2

我有一个自定义 UIProgressView,它自己的 drawRect 从后台进程更新。在 iOS6 中一切正常,而在 iOS7 中,进度条没有更新。

我在喜欢这个layoutSublayersOfLayer之后添加了setProgress

[self.loadingProgress setProgress:pv.floatValue];
[self.loadingProgress layoutSublayersOfLayer:self.loadingProgress.layer];

它就像一个魅力。

我希望这可以帮助别人。

于 2014-02-17T09:50:34.880 回答
1

避免头痛并使用这个优秀的库:

YL进度条

  1. 从 YLProgressBar 文件夹中复制 YLProgressBar.h 和 YLProgressBar.m。
  2. #import "YLProgressBar.h"在要使用进度条的文件中
  3. 通过代码或 xib 添加进度条
  4. progressBar.type = YLProgressBarTypeRounded; progressBar.progressTintColor = [UIColor greenColor]; progressBar.stripesOrientation = YLProgressBarStripesOrientationVertical; progressBar.stripesDirection = YLProgressBarStripesDirectionLeft;
  5. 你有一个很好的、功能齐全的进度条,它支持宽度、高度、修改。
于 2015-07-22T02:03:24.830 回答