2017-05-18 28 views
0

背景:编程改变故事板视图的高度

我在故事板(称为statusView),其具有的30的高度,和四个限制正常UIView钉到前置,顶部空间超级景观,底部空间到它下面的视图。

问题:

我的目标是改变的statusView高度,包括当用户执行的动作的动画帧的变化。因此,statusView可以与0一样短或与100一样高。

我的期望是,由于statusView限于superview及其最近的邻居,它应该会在我改变它的高度时自动“推”下面的视图。

只是为了测试,在viewDidAppear,我拨打以下:

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

问题:然而,30的高度保持为statusView,尽管我将其设置为0

编辑:发布Storyboard设置

这是statusView设置: enter image description here

回答

1

如果您正在使用自动布局,并要设置在层次结构视图中的一个明确的高度,你应该使用自动布局来做到这一点。我假设在界面构建器中设置了高度约束。

为约束创建一个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) 
+0

这是一个好主意 - 改变高度限制。我可以通过约束来动画变化高度吗? – daspianist

+0

用动画代码编辑我的答案 – Dima

+0

太棒了。非常感谢! – daspianist