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
。