簡體   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