根据视图的高度添加约束iOS
问题描述:
我有几个子视图,这些子视图是根据其超级视图的大小进行布局的。我使用自动布局在这里,但超图的大小始终是0,这里是代码:根据视图的高度添加约束iOS
- (instancetype)initWithFrame:(CGRect)frame Count:(NSUInteger)count
{
self = [super initWithFrame:frame];
if (self)
{
self.count = count;
const float circleHeight = self.bounds.size.height * (float)4/(5 * self.count - 1);
NSLog(@"selfHeight %f",self.bounds.size.height);
for (UIImageView * circle in self.circleViewArray)
{
[self addSubview:circle];
}
for (int i = 0;i < self.count;i++)
{
[self.circleViewArray[i] mas_makeConstraints:^(MASConstraintMaker * make){
make.width.equalTo(self);
make.height.equalTo(self).multipliedBy((float)4/(5 * self.count - 1));
make.centerX.equalTo(self);
make.bottom.equalTo(self).with.offset(-i * (circleHeight + stickHeight));
}];
}
}
return self;
}
注意,这里我使用了第三方砌体简化我的代码。 当我在控制台上打印“selfHeight”时,输出始终是0.我应该如何处理它?
答
因此,您的偏移量永远不会工作,因为它们是针对零计算的,从未更新过。您需要以某种方式相对制定约束,或者每次更改框架(需要更新布局)时都需要删除和更新约束。
使相对约束更好,在你的情况下,你应该看看把视图链接在一起,这样yhen之间的间距就被设置,并且高度调整以适应全部可用高度。
伪代码:
UIView *previousView = nil;
for (view in views) {
view.leading = super.leading;
view.trailing = super.trailing;
if (previousView) {
view.top = previousView.bottom;
view.height = previousView.height; // equal relation, not static height
} else {
view.top = super.top;
}
previousView = view;
}
previousView.bottom = super.bottom;
你在哪里得到的帧通过? – Wain
我只是通过一个CGRectZero的方法,因为我在它的超级视图中自动布局它 – Caesar
你的圆圈视图应该如何排列?你可以添加截图/草图它应该是什么样子? – joern