iOS:layoutIfNeeded似乎无法在更新视图后更改约束条件(Xcode 6.4,Swift 1.2)

问题描述:

我正在开发一个聊天应用程序,并试图让我的视图在键盘进入时发生变化。输入textfield位于我的视图的底部,我希望它在点击和键盘出现时上升。 textField在一个名为dockView的小型UIView下,在一个tableView下面显示消息。 dockView的高度有一个引用为dockViewHeight的约束,开头等于47。所以我用这个方法与UITextFieldDelegate:iOS:layoutIfNeeded似乎无法在更新视图后更改约束条件(Xcode 6.4,Swift 1.2)

func textFieldDidBeginEditing(textField: UITextField) { 
    println("did") 
    self.view.layoutIfNeeded() 
    UIView.animateWithDuration(0.5, animations: { 
     println("go \(self.dockViewHeight.constant)") 
     self.dockViewHeight.constant = 400 
     println("go \(self.dockViewHeight.constant)") 
     self.view.layoutIfNeeded() 
     println("go \(self.dockViewHeight.constant)") 
     }, completion: nil) 
} 

该方法被调用,因为一切都被打印到控制台。该约束上也更新,你可以看到她在日志中:

did 
go 47.0 
go 400.0 
go 400.0 

然而,屏幕和dockView的高度上没有变化仍然是相同的。任何想法为什么会发生这种情况?

谢谢!

您应该将您的约束设置在动画块之外,并且只能在该块内调用layoutIfNeeded