如何更新UIView的位置和大小,并参考其超级视图的位置和大小? [迅速]

时间:2016-03-18 04:11:52

标签: ios xcode swift

我有一个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()
    }

3 个答案:

答案 0 :(得分:0)

有两种方式 -

  1. 实施func layoutSubviews()。当超级视图帧变为时,调用此方法。在此方法中,您可以更改子视图框架。

  2. 第二个选项是在配置子视图

  3. 期间使用自动布局

答案 1 :(得分:0)

你不应该调用updateConstraints(),因为我不认为你的视图的约束需要更新。

您只需更改SuperView的大小或位置即可。然后您的视图可以自动设置大小和位置,因为您之前设置了它们的约束。

enter image description here 这是一个演示。https://github.com/cythb/iOSIssues/tree/master/2_AjustSizeDemo

constraints of subview

约束子视图(黄色)中心到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
  }