我有几个子视图,根据超级视图的大小进行布局。我在这里使用自动布局,但超级视图的大小始终为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.我应该如何处理它?
答案 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))))))