我正在尝试在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
视图的高度相同。这些属性都在故事板中正确链接。
有什么想法吗?
答案 0 :(得分:1)
关键问题是,如果使用自动布局,您也应该在IB中为此子视图添加约束。 (我假设您已经为ProgressView
添加了约束。)您不应该更改barView的frame
,而是更改其约束,然后调用setNeedsLayout
。最简单的方法是将前导/尾随/顶部约束添加为零,然后创建最终高度约束。然后,您可以为该高度约束添加IBOutlet
。然后,您可以以编程方式设置该约束的constant
(如果您要使用乘法因子,它应该是此因子和整体进度视图的乘积,而不是条形的因素,本身),然后调用setNeedsLayout
。