I have a UINavigationItem
on my view controller, and I am trying to reduce the spacing between my two RightBarButtonItems
. Here is some of my code:
// 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]
As can be seen, I am using a FixedSpace UIBarButtonItem
, but this is not changing the spacing for some reason. I have thought about subclassing either the UINavigationItem
or the UIBarButtonItem
so that I can set the spacing accordingly, but I couldn't seem to find any methods that I could override to change the spacing between items.
Any insight on how to solve this problem would be greatly appreciated!
Thanks to @Fogmeister's help, I figured out that the width of the view1
and view2
objects, which are UIButtons
, was too large. That was why there was abnormal spacing between them. Here is my final code:
// 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]
I create the background image for the first UIButton
and then use its size to create the frame for that UIButton
. I perform the same actions for the second UIButton
. Then, I create UIBarButtonItems
from the two UIButtons
. After that, I create 26px of fixed space and then -7.0px of fixed space. The purpose of the former is to create a certain amount of space between the two buttons. The purpose of the latter is to move all UIBarButtonItems
over to the right. Then, I add all of the UIBarButtonItems
as rightBarButtonItems
in a particular order so I get the look that I want.
It works great now! Thanks for all of the help, Fogmeister!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With