在iOS 8中更改UIBarButtonItems之间的间距

我有一个UINavigationItem在我的视图控制器 ,我试图减less我的两个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以便我可以相应地设置间距,但我似乎无法find任何方法,我可以重写以更改项目之间的间距。

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

感谢@ 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] 

我创build第一个UIButton的背景图像,然后使用它的大小为该UIButton创build框架。 我为第二个UIButton执行相同的操作。 然后,我从两个UIButtons创buildUIBarButtonItems 。 之后,我创build了26px的固定空间,然后是-7.0px的固定空间。 前者的目的是在两个button之间创build一定的空间。 后者的目的是将所有的UIBarButtonItems移到右边。 然后,我将所有的UIBarButtonItems作为rightBarButtonItems以特定的顺序添加,这样我就能看到我想要的样子。

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

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

在这里输入图像说明

从UIBarButtonItem的文档…

在这里输入图像说明

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

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

无论如何,你试图用负的宽度来达到什么目的? 我几乎肯定会有更好的方法。