我在我的keyboardWillShow方法中使用以下代码,该方法在键盘显示时触发。我知道代码是使用调试运行的,但按钮框架没有变化。当打印首次运行时,origin.y为471.当它在完成时运行时,它仍然是471。
我尝试做的是动画此按钮以显示并向上移动键盘。它将用作文本视图的DONE按钮。
kbHeight是253.
animateDuration是0.25。
Numbers.ANIMATE_DELAY是0.0
//Animated done button with keyboard
origDoneFrame = btnDone.frame
btnDone.hidden = false
println(self.btnDone.frame.origin.y)
var uConverted:UInt = UInt(animateCurve)
var options = UIViewAnimationOptions(uConverted << 16)
UIView.animateWithDuration(
animateDuration,
delay: Numbers.ANIMATE_DELAY,
options: options,
animations: {
println(self.btnDone.frame.origin.y)
println(kbHeight)
println(self.btnDone.frame.origin.y-kbHeight)
self.btnDone.frame = CGRectMake(self.btnDone.frame.origin.x, self.btnDone.frame.origin.y - kbHeight, self.btnDone.frame.size.width, self.btnDone.frame.size.height)
println(self.btnDone.frame.origin.y)
return Void()
},
completion: {finished in
println(self.btnDone.frame.origin.y)
return Void()
}
)
输出返回如下:
471.0
471.0
253.0
218.0
218.0
471.0
按钮有限制,这是我能看到的唯一可以将其重置回底部的东西,但是当我手动更改框架时,我宁愿忽略约束。
答案 0 :(得分:0)
但是当我手动更改框架时,我宁愿忽略约束。
你不能。 Autolayout并不像那样工作。您必须改为修改约束,否则视图会在自动布局过程中重新定位。
创建约束的插座,使按钮处于垂直位置,修改constant
属性,并在动画块中调用view.layoutIfNeeded()
。
答案 1 :(得分:0)
您可以在某种程度上忽略Autolayout约束。它完全取消它们并不是一件容易的事。使用以下代码,您可以完成此任务:
//Set up done button
btnDone.removeConstraints(btnDone.constraints())
btnDone.setTranslatesAutoresizingMaskIntoConstraints(true)
btnDone.frame = CGRectMake(view.frame.size.width - btnDone.frame.size.width - 8, view.frame.size.height - btnDone.frame.size.height - 8 + self.tabBarController!.tabBar.frame.size.height, btnDone.frame.size.width, btnDone.frame.size.height)
btnDone.alpha = 0.0
btnDone.hidden = true
从现在开始,您可以根据需要移动按钮。这确实偶尔会出现关于满足多个约束的警告,但按钮的行为与预期的一样。