【发布时间】:2016-10-14 12:40:24
【问题描述】:
我在使用动画以编程方式删除和添加约束时遇到了困难。我已将现有项目简化为一个小项目,仅用于演示。
设置是有两个(容器)视图:顶部和底部。它们包含两个子视图:蓝色和红色。
顶视图的纵横比限制为 2:3。
我参考了我在 viewDidLoad 中初始化的 topView、aspectRatioConstraint 和 heightConstraint
@IBOutlet weak var aspectRatioConstraint: NSLayoutConstraint!
var heightConstraint: NSLayoutConstraint!
@IBOutlet weak var topView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
heightConstraint = NSLayoutConstraint(item: topView, attribute: .height, relatedBy: .equal, toItem: topView, attribute: .height, multiplier: 1.0, constant: topView.frame.size.height)
NSLayoutConstraint.activate([heightConstraint])
topView.removeConstraint(aspectRatioConstraint)
}
@IBAction func startAnimation(_ sender: AnyObject) {
UIView.animate(withDuration: 1.0, delay: 0.0, usingSpringWithDamping: 0.3, initialSpringVelocity: 0.1, options: .curveEaseIn, animations: {
self.heightConstraint.constant = 20.0
self.view.layoutIfNeeded()
}, completion: nil)
}
导航中的“+”按钮调用startAnimation方法,它应该在一段时间内调整heightConstraint的大小,但它没有。
我做错了什么?
示例项目 -> https://www.dropbox.com/sh/7i75i0zq9dormqb/AACzTYvWOoJL3MjcjgMIyOd9a?dl=0
【问题讨论】:
-
有什么问题?调整大小没有动画或根本不调整大小?
-
如何在 viewDidLoad 中激活约束?它应该会崩溃,因为当时约束还没有准备好。
-
@MaksTheAwesome 根本不会调整大小。 Dasem 我已经想通了。如果 heightConstraint 为 nil { init heightConst,激活它,删除 aspectRatioConst },我已经在 viewDidLayoutSubviews() 中实现
标签: ios swift constraints