增加导航栏高度增加导航栏高度(Increase NavigationBar height)

2019-05-12 08:51发布

我有以下代码:

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都统一到了谷底。 我怎样才能让他们放置在顶部,这样我可以添加更多的底部我自己? 我得到的东西按照图像:

是否有可能把它放置在顶部?

Answer 1:

试试这个代码:

注:代码在斯威夫特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 method.But,没有luck.When,我在其他viewLoad方法尝试这种代码。

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

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

希望上面的代码解决您的问题。



Answer 2:

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

该范围内的视图层次UINavigationBar是私有的,所以你不能没有遍历子视图,并全力以赴与它哈克操纵它。 这可能不是一个好主意。

出于好奇,我看了看消息应用程序在iOS中使用10视图调试器,因为他们显然做到这一点。 他们实际上加入了自己的实现布局UIButton更换背部和rightBarButtonItem。 这是你将能够做的不过他们还建立内部(私人)内容视图零一个的字母,使原来的内容不再可见。
这是东西,你不能这样做很容易很遗憾。 你可以尝试破解约,直到它的工作原理的东西,但记得你还需要处理推/弹出,呼叫状态栏,互动的转换和旋转活动。

然而,如果你不打算对iMessage的风格,只是想增加你的导航栏下面一些内容,为什么不看钉扎UIVisualEffectViewtopLayoutGuide在你UIViewController ? 你可以很容易地得到一个相当漂亮的外观,并将其保存黑客攻击了很多东西。 下面是一个例子:



文章来源: Increase NavigationBar height