我正在试图弄清楚如何使用Autolayout并且我已经找到了一个问题。我想在IB中创建一个大小为200x200的视图。这个视图称为PieView,它有两个带有框架(0,0,200,200)的UIImageViews。 我的问题是,如何覆盖代码中的updateConstraints(我喜欢可视格式语言),或者在IB中,如果我改变PieView的大小(例如100),子视图也会改变(0,0,100,100) )。
如何更改PieView的大小,我正在尝试宽度和高度
NSLayoutConstraint *width = [NSLayoutConstraint constraintWithItem:self
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0f
constant:100.f];//kDiameter * sizeCoef];
答案 0 :(得分:1)
如果容器视图(PieView)的子视图相对于其容器正确定位/调整大小/固定,则您需要做的就是更新容器视图的宽度(PieView)。
要在代码中更改视图的大小,您需要确保在视图的宽度上保留对约束的引用(例如,在属性中)。因此,如果您在Xcode中添加了该约束,则意味着连接该约束的插座。或者,如果您在代码中添加它(正如您在问题中所写的那样),只需将约束分配给属性而不是局部变量。
然后,在updateConstraints
中,将约束的constant
属性更改为新宽度。这是一个例子:
- (void)updateConstraints
{
// Probably want to wrap the below line with a check for when you should actually do this change,
// as updateConstraints may get called more than once (including when you aren't ready to change the width).
self.widthConstraint.constant = 100.0f;
}
然后,当您准备更改宽度时,只需在视图上调用setNeedsUpdateConstraints
!
答案 1 :(得分:0)
我不确定您是否需要重新配置图像视图的高度或宽度约束。如果您希望图像视图使用超视图进行增长和缩小,则只需将图像视图的两侧固定到IB中的超级视图即可。您不需要覆盖updateConstraints。