以编程方式更改 Storyboard 视图的高度

Programmatically changing the height of a Storyboard view

背景:

我在 Storyboard 中有一个正常的 UIView(称为 statusView),它的高度为 30,并且四个约束固定在前导、尾随、顶部 space 到超级视图,底部 space 到它下面的视图。

问题:

我的目标是改变 statusView 的高度,包括在用户执行操作时动画框架变化。因此,statusView 可以短至 0 或高至 100

我的期望是,鉴于 statusView 受限于超级视图及其下方最近的邻居,当我更改其高度时,它应该自动 "push" 下面的视图。

只是为了测试,在 viewDidAppear 中,我调用如下:

self.statusView.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 100.0)
self.statusView.setNeedsDisplay()

问题:但是,尽管我将其设置为 0,但 statusView 的高度仍为 30。

编辑: 发布Storyboard 设置

这是 statusView 的设置:

如果您正在使用自动版式并想为层次结构中的视图设置明确的高度,您应该使用自动版式来完成。我假设在界面生成器中设置了高度限制。

为约束创建一个 IBOutlet 并在界面生成器中 link 它。

@IBOutlet weak var statusViewHeightConstraint: NSLayoutConstraint!

然后,假设这只是一个具有高度常量的尺寸限制,只需在您的代码中更改它:

statusViewHeightConstraint.constant = 100

您可以通过在修改约束后立即将布局调用包装在动画块中来使此更改动画化。像这样:

UIView.animateKeyframes(withDuration: 0.2, delay: 0.0, options: [.beginFromCurrentState, .calculationModeCubic], animations: {
  self.view.layoutIfNeeded()
}, completion: nil)