我有一个superview,里面有另一个子视图。子视图的约束设置为以超视图为中心,超级视图的一半大小。
单击按钮时会更改超级视图的位置和大小,但子视图的位置和大小不会随之更改。我尝试使用UIView.updateConstraints(),但它没有重新定位它或调整它。
所以我的问题是:
对于超级视图,调整子视图大小和重新定位的最佳方法是什么?
谢谢!
以下是代码:
func updateTimerFormat() {
minutesContainer.frame.size.width *= 0.75
minutesContainer.frame.size.height *= 0.75
minutesContainer.center.x = view.center.x
minutesContainer.center.y = view.center.y * 1.5 - 30
// The minutes label is the subview of the minutesContainer
minutesLabel.updateConstraints()
}
答案 0 :(得分:0)
有两种方式 -
实施func layoutSubviews()
。当超级视图帧变为时,调用此方法。在此方法中,您可以更改子视图框架。
第二个选项是在配置子视图
答案 1 :(得分:0)
你不应该调用updateConstraints(),因为我不认为你的视图的约束需要更新。
您只需更改SuperView的大小或位置即可。然后您的视图可以自动设置大小和位置,因为您之前设置了它们的约束。
这是一个演示。https://github.com/cythb/iOSIssues/tree/master/2_AjustSizeDemo
约束子视图(黄色)中心到superview(绿色)中心。约束大小是superview的一半(绿色)。
单击按钮时,您不会执行任何其他操作,只需更改超级视图的大小。
答案 2 :(得分:0)
1 /将minutesContainer约束连接到ViewController:
@IBOutlet weak var widthConstraint: NSLayoutConstraint!
@IBOutlet weak var heightConstraint: NSLayoutConstraint!
@IBOutlet weak var centerYConstraint: NSLayoutConstraint!
2 /更改updateTimerFormat方法:
func updateTimerFormat() {
widthConstraint.constant *= 0.75
heightConstraint.constant *= 0.75
centerYConstraint.constant = view.center.y * 0.5 - 30
}