如何以编程方式向UIBarButtonItem添加填充

时间:2016-05-08 08:39:57

标签: ios swift uinavigationbar uinavigationitem

我在UINavigationBar

中使用此代码以编程方式添加了viewDidLoad()
let navbar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 59.0))
    self.view.addSubview(navbar)

然后我使用此代码添加了两个按钮:

let item = UINavigationItem()
    item.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .Done, target: self, action: #selector(CollectionCollectionViewController.goBack(_:)))

    item.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: #selector(CollectionCollectionViewController.addProduct(_:)))

    navbar.setItems([item], animated: true)

一切都很好,但这个按钮非常接近屏幕的左右边缘。如何在此按钮上添加填充(或左边距和右边距)?

看起来像是:

enter image description here

我看到,当我启动此ViewController时,按钮和屏幕之间的间距只有一次,当我第二次启动它时,按钮和屏幕之间的间距是正确的。有人能解释我为什么吗?

2 个答案:

答案 0 :(得分:0)

您的导航栏的框架看起来像是您意外丢失的间距。其x位置为0,其宽度与视图控制器的宽度相同。因此没有间距。

我建议在视图控制器的故事板中添加导航栏。在大多数情况下,最好在故事板中解决尽可能多的UI问题,因为它会减少您阅读和维护的代码量。

但是,如果要查找导航栏的正确框架位置和尺寸,可以打印导航栏的框架。然后,当它的框架具有正确的位置时,将它的框架与框架在没有间距的情况下进行比较。然后,您可以相应地调整其x位置和width

答案 1 :(得分:0)

我解决了我的问题。如果我们想要从头开始以编程方式添加导航栏,我们需要在viewDidLoad()

中执行此步骤
    // setp 1 = create Navigation Bar

    let navbar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 59.0))
    navbar.delegate = self

    //step 2 = create Navigation Item

    let item = UINavigationItem()
    item.title = "Quick choise"


    //step 3 = create BarButtonItem and set position (left, right)

    let leftButton = UIBarButtonItem(title: "Back", style: .Done, target: self, action: #selector(CollectionCollectionViewController.goBack(_:)))
    item.leftBarButtonItem = leftButton


    let rightButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: #selector(CollectionCollectionViewController.addProduct(_:)))
    item.rightBarButtonItem = rightButton

    //step 4 = add BarButtonItems to Navigation Bar

    navbar.items = [item]

    //step 5 = add Navigation Bar to view

    self.view.addSubview(navbar)