iOS中的layoutIfNeeded立即执行约束重置

来源:互联网 发布:零基础学算法机械工业 编辑:程序博客网 时间:2024/06/03 19:01

layoutIfNeeded

如果,有需要刷新的标记,立即调用layoutSubviews进行布局

这个动画中有用到 举个栗子�� 。



如图 , 上面有个label ,中间有个按钮 , label已经被自动布局到左上角 。 然后我们那个left的constraint

  @IBOutlet weak var leftContrain:NSLayoutConstraint!

在viewDidLoad中声明好,然后在Main.storyboard中进行连线。点击按钮的时候 ,我们把左边的距离改成100 。

在按钮的点击事件里加上这句。

leftContrain.constant = 100

然后我们想要一个动画的效果。
如果这么做

   UIView.animateWithDuration(0.8, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.5, options: UIViewAnimationOptions.AllowAnimatedContent, animations: {                self.leftContrain.constant = 100            }, completion: nil)

你会发现然并卵 。其实这句话self.leftContrain.constant = 100只是执行了setNeedsLayout 标记了需要重新布局,但是没有立即执行。所以我们需要在动画中调用这个方法layoutIfNeeded
所以代码应该这么写

leftContrain.constant = 100        UIView.animateWithDuration(0.8, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.5, options: UIViewAnimationOptions.AllowAnimatedContent, animations: {                self.view.layoutIfNeeded() //立即实现布局            }, completion: nil)

所以上面不管写多少约束的改变,只需要在动画里动用 一次self.view.layoutIfNeeded() ,所有的都会已动画的方式 。如果一些变化不想动画 。在动画前执行self.view.layoutIfNeeded()



文/大石头布(简书作者)
原文链接:http://www.jianshu.com/p/eb2c4bb4e3f1
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

0 0
原创粉丝点击