如何以编程方式在iOS中获取导航栏高

时间:2016-02-25 10:01:37

标签: ios objective-c swift xcode uinavigationbar

我必须在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

}

当我运行此程序时,它将显示

的运行时错误
  

意外在打开时发现了一个零

请帮我解决这个问题。

3 个答案:

答案 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")
    }

}