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

时间:2017-05-18 18:49:23

标签: ios uiview uistoryboard

背景

我在故事板中有一个正常的UIView(名为statusView),其高度为30,并且有四个约束固定到超视图的前导,尾随顶部空间,以及底部空间到它下面的视图。

问题:

我的目标是更改statusView的高度,包括在用户执行操作时动画帧更改。因此,statusView可以与0一样短,也可以与100一样高。

我的期望是,鉴于statusView被限制在超级视图及其下方的最近邻居,它应该在我改变其高度时自动“推”下面的视图。

只是为了测试,我在viewDidAppear中调用以下内容:

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

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

修改已发布Storyboard次设置

这是statusView的设置: enter image description here

1 个答案:

答案 0 :(得分:2)

如果您正在使用自动布局并希望为层次结构中的视图设置显式高度,则应使用autolayout执行此操作。我假设在界面构建器中设置了高度约束。

为约束创建IBOutlet并在界面构建器中将其链接。

@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)