根据视图的高度iOS添加约束

时间:2015-11-01 10:42:30

标签: ios objective-c autolayout

我有几个子视图,根据超级视图的大小进行布局。我在这里使用自动布局,但超级视图的大小始终为0,这是代码:

- (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

1 个答案:

答案 0 :(得分:0)

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

使约束相对更好,在您的情况下,您应该查看将视图链接在一起,以便设置yhen之间的间距,并调整高度以适应完整的可用高度。

伪代码:

(define (bst-insert item bst-tree)
  (cond ((null? bst-tree) (make-bst item '() '()))
        ((= (bst-value bst-tree) item) bst-tree)
        ((< item (bst-value bst-tree))
         (make-bst (bst-value bst-tree)
                   (bst-insert item (bst-left bst-tree))
                   (bst-right bst-tree)))
        (else (make-bst (bst-value bst-tree)
                        (bst-left bst-tree)
                        (bst-insert item (bst-right bst-tree))))))