【发布时间】:2015-10-07 19:46:53
【问题描述】:
当键盘出现时,我试图提升视图,但它只是弹回来。如果我给 CGRectOffset 一个 Y 的正值(向下移动视图),那么它会保持不变。
@IBOutlet weak var PPI: MainTextFields!
var KbHeight: CGFloat!
//----------------------------------------------
func animateTextField(up: Bool) {
let TFMovement = (up ? -KbHeight : KbHeight)
UIView.animateWithDuration(0.7, animations: {
self.view.frame = CGRectOffset(self.view.frame, 0, TFMovement)
})
}
func keyboardWillShow(notification: NSNotification) {
if let userInfo = notification.userInfo {
if let keyboardSize = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
KbHeight = keyboardSize.height
self.animateTextField(true)
}
}
}
func keyboardWillHide(notification: NSNotification) {
self.animateTextField(false)
}
//----------------------------------------------
// Touch Outside Keypad to leave it
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.view.endEditing(true)
}
override func viewWillAppear(animated:Bool) {
super.viewWillAppear(animated)
// For TextField Movement
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
// For TextField Movement
NSNotificationCenter.defaultCenter().removeObserver(self)
}
override func viewDidLoad() {
super.viewDidLoad()
PPI.delegate = self
}
我在 keyboardWillShow 函数中的 CGRectOffset 有什么问题吗?我对 Swift 比较陌生,从教程中得到了这个,但似乎不能正常工作。
【问题讨论】:
-
您的视图有限制吗?如果是这样,那么更改框架将无济于事。您应该根据您希望视图变为的内容更改视图约束,而不是更改由该视图上定义的约束立即改回的框架。