我想用 Masonry 布局一个圆形 UIImageView。所以我创建了这样的 UIImageView:
[self.imageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.mas_centerX);
make.top.equalTo(self.mas_top).with.offset([[UIView ub_padding] floatValue]);
make.bottom.equalTo(self.descriptionLabel.mas_top).with.offset(-[[UIView ub_padding] floatValue]);
make.height.equalTo(self.descriptionLabel.mas_height).priorityHigh();
make.width.equalTo(self.imageView.mas_height);
}];
然后我为 ImageView 创建了约束
[self.imageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.mas_centerX);
make.top.equalTo(self.mas_top).with.offset([[UIView ub_padding] floatValue]);
make.bottom.equalTo(self.descriptionLabel.mas_top).with.offset(-[[UIView ub_padding] floatValue]);
make.height.equalTo(self.descriptionLabel.mas_height).priorityHigh();
make.width.equalTo(self.imageView.mas_height);
}];
然后我尝试应用这些约束,然后设置角半径。
[self setNeedsUpdateConstraints];
[self updateConstraintsIfNeeded];
[self layoutIfNeeded];
self.imageView.layer.cornerRadius = self.imageView.frame.size.width/2;
但 self.imageView 的框架仍未设置(但稍后我在模拟器上查看时它确实会布局)。布局完成后调用什么方法?
Best Answer-推荐答案 strong>
在 View 的 layoutSubviews 方法中调用 super... 后设置圆角半径:
-(void)layoutSubviews{
[super layoutSubviews];
[self applyCornerRadii];
}
这可确保在尝试应用角半径(在我的情况下是创建圆的高度/宽度的 50%)之前已经发生布局,并且计算正确。
关于ios - 具有拐角半径的自动布局(带砌体),我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/28146330/
|