根据视图的高度添加约束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.我应该如何处理它? Just look at the blue circles and omit others

+0

你在哪里得到的帧通过? – Wain

+0

我只是通过一个CGRectZero的方法,因为我在它的超级视图中自动布局它 – Caesar

+0

你的圆圈视图应该如何排列?你可以添加截图/草图它应该是什么样子? – joern

因此,您的偏移量永远不会工作,因为它们是针对零计算的,从未更新过。您需要以某种方式相对制定约束,或者每次更改框架(需要更新布局)时都需要删除和更新约束。

使相对约束更好,在你的情况下,你应该看看把视图链接在一起,这样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; 
+0

我知道它们是针对零计算的,但我只是想知道为什么高度为零。 – Caesar

+0

进行计算时,自身的宽度和高度都为零。 – Wain

+0

那么如何使用自我的宽度和高度呢? – Caesar