2016-10-29 6 views
3
Панель навигации

У меня есть следующий код:Увеличение высоты

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 дп. Для меня это не проблема. У меня проблема: UIBarButtonItems выровнены по низу. Как я могу привести их в соответствие с вершиной, чтобы я мог добавить больше к самому себе? Я получаю что-то, как на картинке:

enter image description here

Можно ли получить его в соответствие к вершине?

+0

проверить мой ответ и сообщить, что код работает ... – Joe

ответ

2

Попробуйте этот код:

Примечание: Код испытания в 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") 

} 

Выход:

enter image description here


Ответ 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 пикселей по вертикали.

enter image description here

Выход 2: barButtonItem переехал 20 пиксель вниз по вертикали.

enter image description here

Надежда, Над кодом решить вашу проблему.

+0

, как Apple делает это так, чтобы он так хорошо анимировал когда пользователь нажимает кнопку «Назад»? При переходе на страницу он увеличивается и уменьшается при возвращении! – KVISH

+0

Вы можете попробовать что-то вроде этого ..... func backTapped (отправитель: UIBarButtonItem) { navigationController? .popViewControllerAnimated (true) } ..... непроверенный код .so, дайте мне знать – Joe

+0

любой удачи ?. Я просто создал простую анимацию на обратной кнопке, а переход VC ... дайте мне знать. я обновлю ответ ... – Joe

1

К сожалению, вы не можете этого сделать.

Иерархия представлений в пределах UINavigationBar является частной, поэтому вы не можете манипулировать ею, не итерируя по подзонам и не взламывая ее. Это, вероятно, не очень хорошая идея.

Из любопытства Я посмотрел приложение «Сообщения» в iOS 10, используя отладчик вида, потому что они явно это делают. Они фактически достигают макета, добавляя свои собственные UIButton, чтобы заменить back и rightBarButtonItem. Это то, что вы могли бы сделать, однако они также установили альфа одного из внутренних (и частных) представлений контента на ноль, чтобы исходное содержимое больше не было видно.
Это то, к чему вы не сможете легко сделать. Вы можете попытаться взломать все до тех пор, пока это не сработает, но помните, что вам также нужно обрабатывать нажатия/всплывающие окна, строки состояния вызова, интерактивные переходы и события поворота.

Если же вы не собираетесь в стиле Шеззаде и просто хотел бы добавить некоторое содержание под вашей навигационной панели, то почему бы не посмотреть на прижав к UIVisualEffectView к topLayoutGuide в вашем UIViewController? Вы можете получить довольно красивый внешний вид довольно легко, и это значительно облегчает хакерство. Вот пример:

Example

+0

Вы знаете, как Google это сделал в приложении Hangouts? – KVISH

+0

@KVISH: Я подозреваю, что у них есть какой-то пользовательский контроллер навигации, судя по тому, насколько он отличается от стандартного 'UINavigationController', но я точно не знаю – liamnichols

Смежные вопросы