更改iOS 8中UIBarButtonItems之间的间距

Ale*_*der 24 spacing uinavigationitem ios swift ios8

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

可以看出,我使用的是FixedSpace UIBarButtonItem,但由于某些原因,这并没有改变间距.我曾经想过继承无论是UINavigationItemUIBarButtonItem,这样我可以设置相应的间距,但我似乎无法找到,我可以重写改变项目之间的间距的任何方法.

任何有关如何解决这个问题的见解将不胜感激!

Ale*_*der 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]
Run Code Online (Sandbox Code Playgroud)

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

它现在很棒!感谢所有的帮助,Fogmeister!


zzz*_*zel 11

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

在此输入图像描述

  • 在stackoverflow上的其他地方已有报道,这在视觉上移动图像,但不会移动可贴带区域以与视觉变化相对应。我自己尚未验证此缺陷。建议您进行测试,以确保按钮图像上任意位置的点击仍然有效,尤其是在使用较大偏移量的情况下。 (3认同)

Fog*_*ter 6

来自UIBarButtonItem文档...

在此输入图像描述

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

如果将宽度设置为-20.0它将忽略它并使用标准宽度.

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