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

Fab*_*gue 25 uinavigationbar ios 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)
Run Code Online (Sandbox Code Playgroud)

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

navigationBar.topItem.title = "some title"
or
navigationBar.title = "some title"
Run Code Online (Sandbox Code Playgroud)

但都失败了.
此外,如果我尝试设置一个按钮

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
Run Code Online (Sandbox Code Playgroud)

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

tes*_*sla 47

针对Swift 4进行了更新

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

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

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

navBar.setItems([navItem], animated: false)
Run Code Online (Sandbox Code Playgroud)

  • 对于导航栏宽度,您应该使用视图宽度而不是将其设置为320 - 应该是 (7认同)

Dav*_*eek 33

基本上是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

}
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是因为您创建了UINavigationBar的实例。如果您想要一个更灵活的解决方案,则必须使用UIView,但是这样会丢失给定的属性,例如title和`setItems` (2认同)
  • 我最好的建议:如果可以找到一个框架,可以提供由UIView制成的UINavigationBar克隆,请查看github。通常您可以找到其他开发人员将其开源的内容 (2认同)