背景
我在故事板中有一个正常的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
次设置
答案 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)