2015-02-03 26 views
12

Używam tego kodu, aby uzyskać logo na pasku nawigacji.Obraz przycisku paska nawigacji

override func viewDidAppear(animated: Bool) { 

    let image = UIImage(named: "LogoWithTextSmaller.png") 
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style: UIBarButtonItemStyle.Plain, target: nil, action: nil) 
    } 

Jest w porządku, ale logo nie ma żadnego koloru - oprócz "niebieskiego". Czy to dlatego, że jest to plik png. Czy jest coś, co mogę tak zachowuje oryginalne kolory

Zrobiłem to:

self.navigationItem.titleView = UIImageView(image: image) 

i że przynosi obraz na pasku nawigacyjnym z właściwymi kolorami - ale to jest w środku i chcę go po lewej.

+0

Próbowałeś zmieniając Tintcolor? UINavigationBar.appearance(). TintColor = UIColor.redColor() – Egghead

+0

Mam już kolor tła na pasku NAV, obraz jest przezroczysty i jest jasno niebieski i zielony, ale kiedy dodaję go z leftBarButtonItem idzie tępo niebieski. Kiedy używam widoku tytułowego, żeby pokazać obraz - jest w porządku, ale muszę to zrobić w lewo, a nie w środku. – Jason

+0

Czy próbowałeś tego: self.navigationItem.leftBarButtonItem.tintColor = UIColor.redColor() – Egghead

Odpowiedz

20

Należy zadeklarować, że obraz pozostaje oryginalny przez cały czas. tak dodanie kodu poniżej

var image = UIImage(named: "image-name") 
image = image?.withRenderingMode(.alwaysOriginal) 
self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style:.plain, target: nil, action: nil) 
+0

Niesamowite, dziękuję Ale "pozwól" musi być "var" – Anytoe

+0

@bhavik shah dzięki temu działa świetnie.Jedyny problem.Obraz używany musi być naprawdę mały, aby zmieścić się w na pasku nawigacyjnym, a następnie wygląda jak piksel, zwłaszcza na 6 i 6 plus. Czy istnieje sposób, w jaki możemy użyć dużego obrazu, ale ustawić ramkę, aby pasował do paska nawigacji? – user2363025

+1

Można to osiągnąć za pomocą pojedynczej linii: 'someBarButtonItem. image = UIImage (o nazwie: "yourPictureName") ?. imageWithRenderingMode (UIImageRenderingMode.AlwaysOriginal) ' – OhadM

2

W Swift 3 samo byłoby przeprowadzić stosując następującą składnię

var image = UIImage(named: "Filter") 
image = image?.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
self.navigationItem.rightBarButtonItem = UIBarButtonItem(image:image , style: UIBarButtonItemStyle.plain, target: nil, action: nil) 
0

Swift 3,0

let btnLogo = UIButton(frame: CGRect(x: 0, y: 0, width: 25, height: 25)) 
btnLogo.setTitle("", for: .normal) 
btnLogo.backgroundColor = UIColor.clear 
btnLogo.layer.cornerRadius = 4.0 
btnLogo.layer.masksToBounds = true 

var imageLogo = UIImage(named: "LogoWithTextSmaller.png") 
imageLogo = imageLogo?.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
btnLogo.setImage(imageLogo, for: .normal) 

let barButton = UIBarButtonItem(customView: btnLogo) 
self.navigationItem.leftBarButtonItem = barButton 

szybki 2,0

var image = UIImage(named: "Filter") 
image = image?.imageWithRenderingMode(UIImageRenderingMode.alwaysOriginal) 

Objective-C

UIImage *image = [[UIImage alloc] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

UIBarButtonItem *_btnLeftBar = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"LogoWithTextSmaller.png"] 
                 style:UIBarButtonItemStylePlain 
                target:self 
                action:@selector(yourMethod)]; 

self.navigationItem.rightBarButtonItem= _btnLeftBar; 

Dla withRenderingMode (_ :) szczegóły patrz poniżej linku dokumentacji jabłko https://developer.apple.com/documentation/uikit/uiimage/1624153-withrenderingmode

0

w Swift 3.0

let Navigateimage = UIImage(named: "LogoWithTextSmaller.png") 
    Navigateimage = image?.withRenderingMode(.alwaysOriginal) 
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: Navigateimage, style:.plain, target: nil, action: nil) 
Powiązane problemy