调整子视图大小的自动布局问题
Posted
技术标签:
【中文标题】调整子视图大小的自动布局问题【英文标题】:AutoLayout issue with resizing subviews 【发布时间】:2013-10-08 21:15:43 【问题描述】:我正在尝试弄清楚如何使用 Autolayout,但我发现了一个问题。我想在 IB 中创建一个大小为 200x200 的视图。这个视图,称为 PieView,有两个 UIImageViews,它们都有帧(0、0、200、200)。 我的问题是,如何在代码(我喜欢视觉格式语言)或 IB 中覆盖 updateConstraints,如果我更改 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];
【问题讨论】:
200x200 PieView 有两个带帧的图像视图(0,0,200,200)?所以图像视图是堆叠在一起的? 【参考方案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
!
【讨论】:
【参考方案2】:我不确定您是否需要重新配置图像视图的高度或宽度限制。如果您希望图像视图随其父视图一起增长和缩小,那么只需将图像视图的侧面固定到 IB 中的父视图。您不需要覆盖 updateConstraints。
【讨论】:
以上是关于调整子视图大小的自动布局问题的主要内容,如果未能解决你的问题,请参考以下文章