调整子视图大小的AutoLayout问题

时间:2013-10-08 21:15:44

标签: ios objective-c interface-builder ios7 autolayout

我正在试图弄清楚如何使用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];

2 个答案:

答案 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。