web-dev-qa-db-fra.com

Changer la taille de UIBarButtonItem (image) dans Swift 3

J'essaie de changer la taille de certaines icônes dans ma barre de navigation, mais je suis un peu confus quant à la procédure à suivre. Mon code jusqu'ici est: 

func setUpNavBarButtons() {

    let moreButton = UIBarButtonItem (image: UIImage(named:"ic_more_vert_3")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(handleMore))

    navigationItem.rightBarButtonItems = [moreButton]

    let refreshButton = UIBarButtonItem (image: UIImage(named:"ic_refresh")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(refreshDataButton))

    navigationItem.leftBarButtonItems = [refreshButton]


}

de l'aide? 

6
Sole

Finalement, je l'ai fait comme ça et ça a fonctionné: 

let moreButton = UIButton(frame: CGRect(x: 0, y: 0, width: 35, height: 35))
moreButton.setBackgroundImage(UIImage(named: "ic_more_vert_3"), for: .normal)
moreButton.addTarget(self, action: #selector(TableViewController.handleMore), for: .touchUpInside)
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: moreButton)

Réponse de: Modifier la largeur d'un UIBarButtonItem dans un UINavigationBar dans Swift

1
Sole

Voici comment je l'ai fait

iOS 10 et inférieur

func setUpMenuButton(){
    let menuBtn = UIButton(type: .custom)
    menuBtn.frame = CGRect(x: 0.0, y: 0.0, width: 20, height: 20)
    menuBtn.setImage(UIImage(named:"menuIcon"), for: .normal)
    menuBtn.addTarget(self, action: #selector(vc.onMenuButtonPressed(_:)), for: UIControlEvents.touchUpInside)

    let menuBarItem = UIBarButtonItem(customView: menuBtn)
    self.navigationItem.leftBarButtonItem = menuBarItem
}

iOS 11 - La barre de navigation affiche Autolayout, le réglage du cadre peut ne pas fonctionner

func setUpMenuButton(){
    let menuBtn = UIButton(type: .custom)
    menuBtn.frame = CGRect(x: 0.0, y: 0.0, width: 20, height: 20)
    menuBtn.setImage(UIImage(named:"menuIcon"), for: .normal)
    menuBtn.addTarget(self, action: #selector(vc.onMenuButtonPressed(_:)), for: UIControlEvents.touchUpInside)

    let menuBarItem = UIBarButtonItem(customView: menuBtn)
    let currWidth = menuBarItem.customView?.widthAnchor.constraint(equalToConstant: 24)
    currWidth?.isActive = true
    let currHeight = menuBarItem.customView?.heightAnchor.constraint(equalToConstant: 24)
    currHeight?.isActive = true
    self.navigationItem.leftBarButtonItem = menuBarItem
}
55
anoop4real

Vous pouvez configurer le cadre de votre bouton comme ci-dessous:

let icon = UIImage(named: "imageName")
let iconSize = CGRect(Origin: CGPoint.zero, size: CGSize(width: 50, height: 50))
let iconButton = UIButton(frame: iconSize)
iconButton.setBackgroundImage(icon, for: .normal)
let barButton = UIBarButtonItem(customView: iconButton)
iconButton.addTarget(self, action: #selector(foo), for: .touchUpInside)
4
jokeman

Extension pour Swift 4.2

Juste une manière différente de mettre en œuvre la réponse fournie par anoop4real

Cependant, l'utilisation du type de bouton .system permet d'appliquer la teinte globale à votre icône.

Utilisation:  

navigationItem.leftBarButtonItem = UIBarButtonItem.menuButton(self, action: #selector(presentSettings), imageName: "settings")

La mise en oeuvre:

extension UIBarButtonItem {

    static func menuButton(_ target: Any?, action: Selector, imageName: String) -> UIBarButtonItem {
        let button = UIButton(type: .system)
        button.setImage(UIImage(named: imageName), for: .normal)
        button.addTarget(target, action: action, for: .touchUpInside)

        let menuBarItem = UIBarButtonItem(customView: button)
        menuBarItem.customView?.translatesAutoresizingMaskIntoConstraints = false
        menuBarItem.customView?.heightAnchor.constraint(equalToConstant: 24).isActive = true
        menuBarItem.customView?.widthAnchor.constraint(equalToConstant: 24).isActive = true

        return menuBarItem
    }
}
3
DogCoffee

Vous pouvez configurer les boutons de la barre en utilisant cette fonction:

public convenience init(customView: UIView)

Et vous pouvez initialiser la vue personnalisée comme vous le souhaitez . Après cela, vous pouvez accéder à la vue si nécessaire via UIBarButtonItem's:

open var customView: UIView?

Astuce: UIButton étant une classe enfant de UIView, vous pouvez aussi l’utiliser directement.

0
Georgi Boyadzhiev