单击文本字段后,我的应用程序向下移动到空白区域,然后使用键盘进行备份。我如何让它停止这样做?我只是想在键盘激活时让屏幕向上移动一点。 这个问题与其他Swift键盘问题不同,因为它使用来自Deitel的书籍 I0S8 for programmers 的代码。解决这个问题可能有助于拥有这本书的其他人。 谢谢,
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "keyboardWillShow:",
name: UIKeyboardWillShowNotification,
object: nil)
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "keyboardWillHide:",
name: UIKeyboardWillHideNotification,
object: nil) // listen for keyboard show/hide notifications
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
NSNotificationCenter.defaultCenter().removeObserver(self,
name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().removeObserver(self,
name: UIKeyboardWillHideNotification, object: nil) // unregister for keyboard show/hide notifications
}
// called when app receives UIKeyboardWillShowNotification
func keyboardWillShow(notification: NSNotification) {
let userInfo = notification.userInfo!
let frame = userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue!
let size = frame.CGRectValue().size // keyboard's size
// get duration of keyboard's slide-in animation
let animationTime = userInfo[UIKeyboardAnimationDurationUserInfoKey]!.doubleValue
// scroll self.tableView so selected UITextField above keyboard
UIView.animateWithDuration(animationTime) {
var insets = self.tableView.contentInset
insets.bottom = size.height
self.tableView.contentInset = insets
self.tableView.scrollIndicatorInsets = insets
}
} // called when app receives UIKeyboardWillHideNotification
func keyboardWillHide(notification: NSNotification) {
var insets = self.tableView.contentInset
insets.bottom = 2
self.tableView.contentInset = insets
self.tableView.scrollIndicatorInsets = insets
}
// hide keyboard if user touches Return key
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
答案 0 :(得分:0)
如果您调整contentInset
属性,则还应该使用contentOffset
属性并调整该属性以实现所需的行为。但是我建议不要使用插图,而是鼓励你选择两条道路之一:
1)如果使用Autolayout:
如果您正在使用Autolayout并将约束作为IBOutlet
连接,则在willShow
上将约束常量调整为您需要的任何值。
self.constraint.constant = 2
self.view.layoutIfNeeded()
将在没有动画的情况下进行调整并设置动画:
self.constraint.constant = 2
UIView.animateWithDuration(duration, animations: {
self.view.layoutIfNeeded()
})
然后当调用willHide
时,只需将约束常量设置回0(或者它的默认值/原始值是什么,并设置为动画)。
2)如果不使用Autolayout:
不是调整约束,而是根据需要调整要移动的视图的帧位置和动画。