ios 使用 Button 和 Title Swift 以编程方式创建 NavBar

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/33717698/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 08:14:57  来源:igfitidea点击:

Create NavBar programmatically with Button and Title Swift

iosswiftuinavigationbar

提问by Fabian Boulegue

I try to create a NavBar, so far the NavBar is no problem but when I try to add the buttons and title, they don't get displayed

我尝试创建一个 NavBar,到目前为止 NavBar 没有问题,但是当我尝试添加按钮和标题时,它们没有显示

My NavBar look like

我的导航栏看起来像

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)

so i try to set my NavBar title like

所以我尝试将我的 NavBar 标题设置为

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

but both fail.
Also if i try to set a button

但两者都失败了。
另外,如果我尝试设置一个按钮

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

this does not give me a error but the button is simply not displayed

这不会给我一个错误,但按钮根本没有显示

回答by tesla

Updated for Swift 5

为 Swift 5 更新

Create a navigation item instance and set title and right/left buttons to it. After navigation item is configured add it to the navigation bar.

创建一个导航项实例并为其设置标题和右/左按钮。配置导航项后,将其添加到导航栏。

let navBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 44))
view.addSubview(navBar)

let navItem = UINavigationItem(title: "SomeTitle")
let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(selectorName:))
navItem.rightBarButtonItem = doneItem

navBar.setItems([navItem], animated: false)

回答by David Seek

Basically azimov's answer in Swift 4

基本上 azimov 在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

}