iOS:LayoutIfNeedd不';在约束发生变化后,似乎无法更新视图(Xcode 6.4,Swift 1.2)

iOS:LayoutIfNeedd不';在约束发生变化后,似乎无法更新视图(Xcode 6.4,Swift 1.2),layout,uiview,xcode6,constraints,uiviewanimation,Layout,Uiview,Xcode6,Constraints,Uiviewanimation,我正在开发一个聊天应用程序,试图在键盘输入时改变我的视图。输入文本字段位于我视图的底部,我希望它在单击并显示键盘时向上移动。textField位于一个名为dockView的小UIView中,在tableView下显示消息。dockView的高度有一个引用为dockView的约束,该约束在开始时等于47。因此,我将此方法用于UITextFieldDelegate: func textFieldDidBeginEditing(textField: UITextField) { println

我正在开发一个聊天应用程序,试图在键盘输入时改变我的视图。输入文本字段位于我视图的底部,我希望它在单击并显示键盘时向上移动。textField位于一个名为dockView的小UIView中,在tableView下显示消息。dockView的高度有一个引用为dockView的约束,该约束在开始时等于47。因此,我将此方法用于UITextFieldDelegate:

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的高度保持不变。你知道为什么会这样吗


谢谢

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