更改iOS 8中UIBarButtonItems之间的间距

时间:2014-10-28 17:20:43

标签: ios swift ios8 uinavigationitem spacing

我的视图控制器上有UINavigationItem,我正在尝试减少两个RightBarButtonItems之间的间距。以下是我的一些代码:

// Create two UIBarButtonItems
    let item1:UIBarButtonItem = UIBarButtonItem(customView: view1)
    let item2:UIBarButtonItem = UIBarButtonItem(customView: view2)

    var fixedSpace:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil)
    fixedSpace.width = -20.0

    // Add the rightBarButtonItems on the navigation bar
    viewController.navigationItem.rightBarButtonItems = [item2, fixedSpace, item1]

可以看出,我使用的是FixedSpace UIBarButtonItem,但由于某种原因,这并没有改变间距。我已经考虑过对UINavigationItemUIBarButtonItem进行子类化,以便我可以相应地设置间距,但我似乎无法找到任何可以覆盖的方法来更改项目之间的间距

非常感谢有关如何解决此问题的任何见解!

3 个答案:

答案 0 :(得分:22)

感谢@ Fogmeister的帮助,我发现view1view2对象的宽度UIButtons太大了。这就是为什么它们之间存在异常间距的原因。这是我的最终代码:

// Get the first button's image
    var view1Img:UIImage = UIImage(named: "Image1")!

    // Create the first button
    var view1:UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: view1Img.size.width, height: view1Img.size.height))

    // Get the second button's image
    var view2Img:UIImage = UIImage(named: "Image2")!

    // Create the second button
    var view2:UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: view2Img.size.width, height: view2Img.size.height))

    // Create two UIBarButtonItems
    let item1:UIBarButtonItem = UIBarButtonItem(customView: view1)
    let item2:UIBarButtonItem = UIBarButtonItem(customView: view2)

    // Set 26px of fixed space between the two UIBarButtonItems
    var fixedSpace:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil)
    fixedSpace.width = 26.0

    // Set -7px of fixed space before the two UIBarButtonItems so that they are aligned to the edge
    var negativeSpace:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil)
    negativeSpace.width = -7.0

    // Add the rightBarButtonItems on the navigation bar
    viewController.navigationItem.rightBarButtonItems = [negativeSpace, item2, fixedSpace, item1]

我为第一个UIButton创建背景图片,然后使用其大小为UIButton创建框架。我对第二个UIButton执行相同的操作。然后,我从两个UIBarButtonItems创建UIButtons。之后,我创建了26px的固定空间,然后是-7.0px的固定空间。前者的目的是在两个按钮之间创建一定量的空间。后者的目的是将所有UIBarButtonItems移到右边。然后,我按照特定顺序将所有UIBarButtonItems添加为rightBarButtonItems,以便我得到我想要的外观。

现在效果很好!感谢所有的帮助,Fogmeister!

答案 1 :(得分:11)

另一种方法是改变IB中的左右图像插入。

enter image description here

答案 2 :(得分:6)

来自docs for UIBarButtonItem...

enter image description here

  

如果值为0.0或负数,则该项目会将组合图像和标题的宽度设置为适合。

如果将宽度设置为-20.0,则会忽略它并使用标准宽度。

无论如何,你想要以负宽度实现什么?我几乎肯定会有更好的方法。