繁体   English   中英

增加NavigationBar高度

[英]Increase NavigationBar height

我有以下代码:

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都与底部对齐。 如何让它们与顶部对齐,以便我可以自己添加更多底部? 我按照图像得到了一些东西:

在此输入图像描述

有可能让它与顶部对齐吗?

不幸的是你做不到。

UINavigationBar的视图层次结构是私有的,因此您无法在不迭代子视图的情况下对其进行操作。 这可能不是一个好主意。

出于好奇,我使用视图调试器查看了iOS 10中的Messages应用程序,因为它们显然是这样做的。 他们实际上通过添加自己的UIButton来替换back和rightBarButtonItem来实现布局。 这是您可以执行的操作,但是他们还将其中一个内部(和私有)内容视图的alpha设置为零,以便原始内容不再可见。
不幸的是,这是你无法轻易做到的事情。 你可以尝试破解它直到它工作,但记住你还需要处理推/弹,在调用状态栏,交互式转换和旋转事件。

然而,如果你不打算对iMessage的风格,只是想增加你的导航栏下面一些内容,为什么不看钉扎UIVisualEffectViewtopLayoutGuide在你UIViewController 你可以很容易地获得一个相当不错的外观,它可以节省很多黑客的东西。 这是一个例子:

例

试试这段代码:

注意:代码在Swift 3中测试过。

答案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方法。但是,没有运气。当我在其他viewLoad方法中尝试此代码时。

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

在此输入图像描述

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

在此输入图像描述

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM