2015-11-01 56 views
0

我有幾個子視圖,這些子視圖是根據其超級視圖的大小進行佈局的。我使用自動佈局在這裏,但超圖的大小始終是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

回答

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; 
+0

我知道它們是針對零計算的,但我只是想知道爲什麼高度爲零。 – Caesar

+0

進行計算時,自身的寬度和高度都爲零。 – Wain

+0

那麼如何使用自我的寬度和高度呢? – Caesar