wake-up-neo.com

Ändern Sie die Größe von UIBarButtonItem (Bild) in Swift 3

Ich versuche, die Größe einiger Symbole in meiner navBar zu ändern, aber ich bin etwas verwirrt, wie das zu tun ist. Mein Code ist bisher: 

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]


}

irgendeine Hilfe? 

6
Sole

Am Ende habe ich es so gemacht und es hat funktioniert: 

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)

Antwort von: Breite eines UIBarButtonItem in einer UINavigationBar in Swift ändern

1
Sole

So habe ich es gemacht

iOS 10 und darunter

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 - Die Navigationsleiste enthält Autolayout, sodass die Bildeinstellung möglicherweise nicht funktioniert

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

Sie können den Rahmen Ihrer Schaltfläche wie folgt konfigurieren:

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

Erweiterung für Swift 4.2

Nur eine andere Art der Implementierung, die Antwort von anoop4real.

Wenn Sie jedoch den Tastentyp .system verwenden, kann der globale Farbton auf Ihr Symbol angewendet werden

Verwendungszweck:  

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

Implementierung:

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

@ DogCoffee Antwort ist eine großartige und kreative Möglichkeit, das Problem zu lösen. Darf ich einige leichte Modifikationen vorschlagen, um Größe und Farbton zu berücksichtigen

extension UIBarButtonItem {

    static func menuButton(_ target: Any?,
                           action: Selector,
                           imageName: String,
                           size:CGSize = CGSize(width: 32, height: 32),
                           tintColor:UIColor?) -> UIBarButtonItem
    {
        let button = UIButton(type: .system)
        button.tintColor = tintColor
        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: size.height).isActive = true
        menuBarItem.customView?.widthAnchor.constraint(equalToConstant: size.width).isActive = true

        return menuBarItem
    }
}
1
valvoline

Sie können die Schaltflächen der Leiste mit dieser Funktion konfigurieren:

public convenience init(customView: UIView)

Und Sie können die benutzerdefinierte Ansicht nach Belieben initiieren. Danach können Sie die Ansicht bei Bedarf über UIBarButtonItem aufrufen:

open var customView: UIView?

Hinweis: Da UIButton eine untergeordnete Klasse von UIView ist, können Sie sie auch direkt verwenden.

0