增加NavigationBar高度

我有以下代码:

func navbarbutton() { UIView.animateWithDuration(0.2, animations: { () -> Void in let current = self.navigationController?.navigationBar.frame self.navigationController?.navigationBar.frame = CGRectMake(self.frame!.origin.x, self.frame!.origin.y, self.frame!.size.width, current!.size.height + 50) self.navigationController?.navigationBar.layoutIfNeeded() }) } 

我能够将导航栏的高度提高50 dp。 这对我来说不是问题。 我遇到的问题是, UIBarButtonItems都alignment到底部。 我怎样才能让他们alignment顶部,以便我可以自己添加更多的底部? 我根据图像得到一些东西:

在这里输入图像说明

是否有可能把它alignment到顶部?

试试这个代码:

注意:代码在Swift 3中testing。

答案1:已 更新答案

 class ViewController: UIViewController { var customBar: UINavigationBar = UINavigationBar() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //Title title = "Some Title" // Add bar button item navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped)) navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(addTapped)) self.customBar.frame = CGRect(x:0, y:0, width:view.frame.width, height:(navigationController?.navigationBar.frame.height)! + 50) self.customBar.backgroundColor = UIColor.green self.view.addSubview(customBar) } func addTapped() { print("Button Pressed") } 

输出:

在这里输入图像说明


答案2:

 override var isViewLoaded: Bool { // Add bar button item navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped)) navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(addTapped)) //Vertical and Horizonal barButtonItem position offset navigationItem.leftBarButtonItem?.setTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: 20), for: UIBarMetrics.default) navigationItem.rightBarButtonItem?.setTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: 20), for: UIBarMetrics.default) return true } func addTapped() { print("Button Pressed") } 

注意:以上代码只适用于isViewLoaded:Bool method.But,没有运气。当我在其他viewLoad方法中试过这段代码时。

输出1: barButtonItem垂直向上移动20像素。

在这里输入图像说明

输出2: barButtonItem垂直向下移动20像素。

在这里输入图像说明

希望,上面的代码修复你的问题。

不幸的是,你不能这样做。

UINavigationBar的视图层次结构是私有的,所以如果不迭代子视图并且使用它,就不能操作它。 这可能不是一个好主意。

出于好奇,我使用视图debugging器查看iOS 10中的Messages应用程序,因为他们显然是这样做的。 他们实际上通过添加他们自己的UIButton来replaceback和rightBarButtonItem来实现布局。 这是你能够做的事情,但是他们也设置了内部(和私人)内容视图之一的alpha值为零,以便原始内容不再可见。
这是不幸的,你不能这么做。 你可以尝试破解一些事情,直到它工作,但记住你还需要处理推/拉,在通话状态栏,交互式转换和旋转事件。

如果你不打算使用iMessage风格,只是想在导航栏下添加一些内容,为什么不把UIVisualEffectView固定到UIViewControllertopLayoutGuide ? 你可以很容易地得到一个相当不错的外观,它可以节省大量的黑客东西。 这是一个例子:

例