关于swift:在iOS 8中的UIBarButtonItem之间更改间距

Change Spacing Between UIBarButtonItems in iOS 8

我的视图控制器上有一个UINavigationItem,并且试图减小两个RightBarButtonItems之间的间距。 这是我的一些代码:

1
2
3
4
5
6
7
8
9
// 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子类化,以便我可以相应地设置间距,但是我似乎找不到任何可以重写以更改项目间距的方法。

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    // Get the first button's image
    let view1Img = UIImage(named:"Image1")!
   
    // Create the first button
    let view1 = UIButton(frame: CGRect(x: 0, y: 0, width: view1Img.size.width, height: view1Img.size.height))
   
    // Get the second button's image
    let view2Img = UIImage(named:"Image2")!
   
    // Create the second button
    let view2 = UIButton(frame: CGRect(x: 0, y: 0, width: view2Img.size.width, height: view2Img.size.height))
   
    // Create two UIBarButtonItems
    let item1 = UIBarButtonItem(customView: view1)
    let item2 = UIBarButtonItem(customView: view2)
   
    // Set 26px of fixed space between the two UIBarButtonItems
    let fixedSpace = UIBarButtonItem(barButtonSystemItem: .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
    let negativeSpace = UIBarButtonItem(barButtonSystemItem: .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执行相同的操作。然后,我从两个UIButtons创建UIBarButtonItems。之后,我创建了26px的固定空间,然后创建了-7.0px的固定空间。前者的目的是在两个按钮之间创建一定量的空间。后者的目的是将所有UIBarButtonItems移到右侧。然后,按特定顺序将所有UIBarButtonItems作为rightBarButtonItems添加,以便获得所需的外观。

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


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

enter image description here


从文档的UIBarButtonItem ...

enter image description here

If the value is 0.0 or negative, the item sets the width of the combined image and title to fit.

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

无论如何,您要达到负宽度是什么?我几乎可以肯定会有更好的方法。