J'ai un UINavigationItem
sur mon contrôleur de vue, et j'essaie de réduire l'espacement entre mes deux RightBarButtonItems
. Voici une partie de mon 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]
Comme on peut le voir, j'utilise un FixedSpace UIBarButtonItem
, mais cela ne change pas l'espacement pour une raison quelconque. J'ai pensé à sous-classer le UINavigationItem
ou le UIBarButtonItem
afin de pouvoir définir l'espacement en conséquence, mais je n'arrivais pas à trouver de méthodes que je pouvais remplacer pour changer l'espacement entre les éléments .
Toute idée sur la façon de résoudre ce problème serait grandement appréciée!
Grâce à l'aide de @ Fogmeister, j'ai compris que la largeur du view1
et view2
objets, qui sont UIButtons
, était trop volumineux. C'est pourquoi il y avait un espacement anormal entre eux. Voici mon code final:
// 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]
Je crée l'image d'arrière-plan pour le premier UIButton
puis j'utilise sa taille pour créer le cadre pour ce UIButton
. J'exécute les mêmes actions pour le deuxième UIButton
. Ensuite, je crée UIBarButtonItems
à partir des deux UIButtons
. Après cela, je crée 26 pixels d'espace fixe, puis -7,0 pixels d'espace fixe. Le premier a pour but de créer un certain espace entre les deux boutons. Le but de ce dernier est de déplacer tous les UIBarButtonItems
vers la droite. Ensuite, j'ajoute tous les UIBarButtonItems
en tant que rightBarButtonItems
dans un ordre particulier afin d'obtenir le look que je veux.
Cela fonctionne très bien maintenant! Merci pour toute l'aide, Fogmeister!
De la docs pour UIBarButtonItem ...
Si la valeur est 0,0 ou négative , l'élément définit la largeur de l'image et du titre combinés pour s'adapter.
Si vous définissez la largeur sur -20.0
il l'ignorera et utilisera la largeur standard.
Qu'est-ce que vous essayez de faire avec une largeur négative de toute façon? Je suis presque certain qu'il y aura une meilleure façon.