在swift中更改UINavigationBar中UIBarButtonItem的宽度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在swift中更改UINavigationBar中UIBarButtonItem的宽度相关的知识,希望对你有一定的参考价值。

我需要在swift 2.0中为我的导航栏按钮设置框架

我试过这段代码

self.navigationController!.navigationBar.drawRect(CGRectMake(0, 0, 30, 30)) 

但它不会起作用

提前致谢

答案
// Swift 3
let backButton = UIButton(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
backButton.setBackgroundImage(UIImage(named: "img"), for: .normal)
backButton.addTarget(self, action: "action:", for: .touchUpInside)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButton)

// Swift 2
let backButton = UIButton(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
backButton.setBackgroundImage(UIImage(named: "img"), forState: .Normal)
backButton.addTarget(self, action: "action:", forControlEvents: .TouchUpInside)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButton)
另一答案
    // We dont have  Property to change UIBarButtonItem frame
    // So we can creat UIButton() and give requered frame and add to navigationItem.setLeftBarButtonItems
    // Please refere Belove code

    // Swift 2.0

    let btnBack   = UIButton()
    btnBack.frame = CGRectMake(0, 0, 100, 64)
    btnBack.addTarget(self, action: "backAction", forControlEvents: UIControlEvents.TouchUpInside)
    let leftBarBackBtn: UIBarButtonItem = UIBarButtonItem(customView: btnBack)
    self.navigationItem.setLeftBarButtonItems([ leftBarBackBtn ], animated: false)

    // Please submit your answer with Explanation comments to improve your Quality or Answer and question
另一答案

swift 3的最佳答案:

 let homeButton = UIButton(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
 homeButton.setBackgroundImage(#imageLiteral(resourceName: "home-1"), for: .normal)
 homeButton.addTarget(self, action: #selector(homePressed), for: .touchUpInside)
 self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: homeButton)
另一答案
    func createFakeAndSearchCurrentLocationBarButton (vw: UIViewController) {

    let fakeCurrentLocationGo = UIButton(type: .custom)
    fakeCurrentLocationGo.setImage(UIImage(named: "reallocationgo50"), for: .normal)
    fakeCurrentLocationGo.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
    fakeCurrentLocationGo.addTarget(vw, action: #selector(goToMyCurrentLocationPin), for: .touchUpInside)
    let leftItem = UIBarButtonItem(customView: fakeCurrentLocationGo)


    let searchLocationBtn = UIButton(type: .custom)
    searchLocationBtn.setImage(UIImage(named: "search"), for: .normal)
    searchLocationBtn.frame = CGRect(x: 0, y: 0, width: 15, height: 15)
    fakeCurrentLocationGo.addTarget(vw, action: #selector(searchLocationHandle), for: .touchUpInside)
    let rightItem = UIBarButtonItem(customView: searchLocationBtn)

    vw.navigationItem.setRightBarButtonItems([leftItem,rightItem], animated: true)

}

以上是关于在swift中更改UINavigationBar中UIBarButtonItem的宽度的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中更改 UINavigationBar 中的编辑/完成按钮标题 [重复]

快速更改 UINavigationBar 中 UIBarButtonItem 的宽度

UINavigationBar.appearance().tintColor 在 Swift 中不起作用

如何在 swift 4 中更改 NavBar 标题文本颜色?

使用 swift 更改 UINavigationController 标题时延迟

以编程方式更改 UINavigationbar 背景颜色和标题字体/颜色