Создавайте NavBar программно с помощью кнопки и заголовка Swift

Я пытаюсь создать NavBar, пока NavBar не проблема, но если я попытаюсь добавить кнопки и заголовок, я сосать.

Мой NavBar выглядит как

let NameHeight = screenHeight * 0.09
let NameWidth = screenWidth
let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: NameWidth, height: NameHeight))
self.view.addSubview(navBar)

поэтому я пытаюсь установить заголовок NavBar, например

navigationBar.topItem.title = "some title"
or
navigationBar.title = "some title"

но оба не работают.
Также, если я пытаюсь установить кнопку

let btnName = UIButton()
btnName.setImage(UIImage(named: "imagename"), forState: .Normal)
btnName.frame = CGRectMake(0, 0, 30, 30)
btnName.addTarget(self, action: Selector("action"), forControlEvents: .TouchUpInside)

//.... Set Right/Left Bar Button item
let rightBarButton = UIBarButtonItem()
rightBarButton.customView = btnName
self.navigationItem.rightBarButtonItem = rightBarButton

это не дает мне ошибку, но кнопка просто не отображается

Ответы

Ответ 1

Вы должны создать экземпляр элемента навигации и установить для него заголовок и правые/левые кнопки. После настройки элемента навигации добавьте его в панель навигации.

let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: 320, height: 44))
self.view.addSubview(navBar);
let navItem = UINavigationItem(title: "SomeTitle");
let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: nil, action: "selector");
navItem.rightBarButtonItem = doneItem;
navBar.setItems([navItem], animated: false);

Ответ 2

В основном азимов отвечает в Swift 4

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNavigationBar()
}

func setNavigationBar() {
    let screenSize: CGRect = UIScreen.main.bounds
    let navBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: screenSize.width, height: 44))
    let navItem = UINavigationItem(title: "")
    let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: nil, action: #selector(done))
    navItem.rightBarButtonItem = doneItem
    navBar.setItems([navItem], animated: false)
    self.view.addSubview(navBar)
}

@objc func done() { // remove @objc for Swift 3

}