带有Autolayout的iOS中的垂直进度条

时间:2015-02-01 14:13:38

标签: ios uiview autolayout

我正在尝试在iOS中创建一个垂直进度条,可以在界面构建器中作为UIView放置,并给出一个进度条视图类。这是我的班级文件:

ProgressBar.h:

@interface ProgressBar : UIView
@property (nonatomic, retain) IBOutlet UIView *barView
-(void)setBarValue:(float)value;
@end

ProgressBar.m:

-(id)initWithCoder:(NSCoder *)aDecoder {
    id s = [super initWithCoder:aDecoder];
    if (s) {
        self.backgroundColor = [UIColor clearColor];
    }
    return s;
}

-(void)setBarValue:(float)val {
    [self.barView setBackgroudnColor:TURQUOISE];
    CGRect frame = self.barView.frame;
    frame.size.height = self.barview.frame.size.height * val;
    [self.barView setFrame:frame];
}

我对' barView'的唯一约束。 ProgressBar元素内部对齐底边'。 setFrame方法似乎永远不会更新条形图,即使在完整高度,内部self.barView也不会与ProgressBar视图的高度相同。这些属性都在故事板中正确链接。

enter image description here

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

关键问题是,如果使用自动布局,您也应该在IB中为此子视图添加约束。 (我假设您已经为ProgressView添加了约束。)您不应该更改barView的frame,而是更改其约束,然后调用setNeedsLayout。最简单的方法是将前导/尾随/顶部约束添加为零,然后创建最终高度约束。然后,您可以为该高度约束添加IBOutlet。然后,您可以以编程方式设置该约束的constant(如果您要使用乘法因子,它应该是此因子和整体进度视图的乘积,而不是条形的因素,本身),然后调用setNeedsLayout