我必须在keyboardwillshown
时向上移动我的视图,然后当键盘隐藏时它回到正常位置
实际上我在viewdidload
方法上使用了这段代码:
override func viewDidLoad() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)
}
这是我用来上下移动的方法
func keyboardWillShow(notification:NSNotification){
print("keyboardwillshow")
let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue()
self.view.frame = CGRectMake(0.0, -keyboardSize!.size.height + (self.navigationController?.navigationBar.frame.size.height)! + 20 , self.view.frame.size.width, self.view.frame.size.height )
}
func keyboardWillHide(notification:NSNotification){
self.view.frame = CGRectMake(0.0,(self.navigationController?.navigationBar.frame.size.height)!, self.view.frame.size.width, self.view.frame.size.height)
// self.view.frame.origin.y += 350
}
当我运行此程序时,它将显示
的运行时错误意外在打开时发现了一个零
请帮我解决这个问题。
答案 0 :(得分:2)
在 Swift 3 中,您将通过以下方式获取导航栏高度:
self.navigationController?.navigationBar.intrinsicContentSize.height
答案 1 :(得分:0)
let navigationBarHeight: CGFloat = self.navigationController!.navigationBar.frame.height
答案 2 :(得分:0)
您应该以这种方式保护您的代码免受nil值的影响。它还有助于在导航控制器和外部使用视图控制器。
func keyboardWillShow(notification:NSNotification){
print("keyboardwillshow")
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue() {
if let navBarHeight = self.navigationController?.navigationBar.frame.size.height {
self.view.frame = CGRectMake(0.0, -keyboardSize.size.height + navBarHeight + 20 , self.view.frame.size.width, self.view.frame.size.height )
} else {
print("could not get navbar height")
self.view.frame = CGRectMake(0.0, -keyboardSize.size.height + 20 , self.view.frame.size.width, self.view.frame.size.height )
}
} else {
print("no keyboard size property")
}
}