2017-03-28 4 views
2

Ich versuche, die Größe einiger Symbole in meiner navBar zu ändern, aber ich bin ein wenig verwirrt, wie man das macht? Mein Code ist so weit:Ändere Größe von UIBarButtonItem (Bild) in Swift 3

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] 


} 

Hilfe?

Antwort

-1

Am Ende habe ich es so gemacht und es funktionierte:

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: Change width of a UIBarButtonItem in a UINavigationBar in swift

0

Sie können die Leistenschaltflächen mit dieser Funktion konfigurieren:

public convenience init(customView: UIView) 

Und Sie können die benutzerdefinierte Ansicht init wie Sie wünschen. Danach Sie die Ansicht zugreifen können bei Bedarf über UIBarButtonItem ‚s:

open var customView: UIView? 

Hinweis: Da UIButton ein Kind Klasse von UIView ist, können Sie es direkt verwenden.

+0

dieser Code würde Wo gehen? – Sole

+0

Anstatt "let moreButton = UIBarButtonItem (image: UIImage (benannt:" ic_more_vert_3 ")?. MitRenderingMode (.alwaysOriginal), style: .plain, target: self, action: #selector (handleMore))' Erstellen Sie eine UIButton und Setze das Bild "ic_more_vert_3" darauf. Dann benutze die 'let moreButton = init (customView: theButtonThatYouCreated) ' –

4

Sie können den Rahmen Sie Taste wie unten 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) 
+0

Hallo, ich habe versucht, Ihren Code zu implementieren, aber bekomme den folgenden Fehler: Kann den Wert vom Typ' Int 'nicht in den erwarteten Argumenttyp' CGSize 'umwandeln. Was ist die Dimensionierungskonfiguration? Ist es nur Größe: 50 usw. – Sole

+0

@Sole Es ist eine Struktur mit Breite und Höhe – jokeman

+0

@Sole aktualisiert den Beispielcode – jokeman

6

Diese ist, wie ich es tat

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 - Navigationsleiste mit Autolayout kommen so Rahmeneinstellung nicht

arbeiten kann
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 
} 
+1

Dies sollte als die richtige Antwort gekennzeichnet werden, es ist der einzige, der iOS 11 behandelt. – Horea

Verwandte Themen