2016-05-16 19 views
7

Birçok iş parçacığı okudum, ancak hiçbiri bu soruyu Swift'in en son sürümü için net ve tutarlı bir yanıt olarak çözmedi. Örneğin, this question'un en iyi yanıtı UINavigationBar.appearance().setShadowImage(). Bununla birlikte, böyle bir yöntem, en son hızlı sürümde mevcut değildir.UINavigationBar'ın alt kenarlığının rengi nasıl değiştirilir?

alt kenarlığı gizlemek istemiyorum. Ben sadece rengini rengini değiştirmek istiyorum. Ayrıca, yüksekliği değiştirebilmek harika olurdu, ama bir soruda çok fazla şey sorduğumu biliyorum. Düzenleme

: Bir 2x1 piksellik resim oluşturulur ve ShadowImage olarak ayarlayın, ancak sınır değişmeden kalır:

UINavigationBar.appearance().barTintColor = UIColor.whiteColor() 
UINavigationBar.appearance().shadowImage = UIImage(named: "border.jpg") //in my AppDelegate, for global appearance 

İşte görüntü bu; Bu gerçekten küçük: border image

+2

Gölge görüntüsü hala var, yapmanız gereken 'UINavigationBar.appearance(). ShadowImage = ...Swift in – dan

+0

Otomatik tamamlamanın neden shadowImage göstermediğini bilen var mı? (Ama aslında var) – TIMEX

+0

Çünkü UINavigationBar.appearance() 'yoluyla erişilemiyor. – ZGski

cevap

0

UISomeClass.setSomething(whatIWantToSet) gibi eski UIKit ayarlayıcı yöntemleri, bir = işaretiyle doğrudan ayarlayabilmeniz için yeniden biçimlendirilmiştir. Yani, benim örneğimde UISomeClass.something = whatIWantToSet'u kullanmalısınız. Sizin durumunuzda UINavigationBar.appearance().shadowImage = whatYouWantToSet.

13

SWIFT 2.x: kolaylık Out

, bana aslında hemen aşağıdaki koduyla bir renk olarak kullanmak için izin UIImage() genişlettik.

extension UIImage { 
    class func imageWithColor(color: UIColor) -> UIImage { 
     let rect = CGRectMake(0, 0, 1.0, 0.5) 
     UIGraphicsBeginImageContextWithOptions(rect.size, false, 0) 
     color.setFill() 
     UIRectFill(rect) 
     let image: UIImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return image 
    } 
} 

Ardından, bu durumda viewController en UINavigationBar 'ın gölge görüntüsünü veya rengini ayarlamak için kod aşağıdaki satırları ekleyin isteyeceksiniz.

// Sets Bar's Background Image (Color) // 
self.navigationController?.navigationBar.setBackgroundImage(UIImage.imageWithColor(UIColor.blueColor()), forBarMetrics: .Default) 
// Sets Bar's Shadow Image (Color) // 
self.navigationController?.navigationBar.shadowImage = UIImage.imageWithColor(UIColor.redColor()) 

SWIFT 3.x/4.x:

Uzatma kodu:

extension UIImage { 
    class func imageWithColor(color: UIColor) -> UIImage { 
     let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 0.5) 
     UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0) 
     color.setFill() 
     UIRectFill(rect) 
     let image : UIImage = UIGraphicsGetImageFromCurrentImageContext()! 
     UIGraphicsEndImageContext() 
     return image 
    } 
} 

NavigationBar kodu:

// Sets Bar's Background Image (Color) // 
navigationController?.navigationBar.setBackgroundImage(UIImage.imageWithColor(color: .blue), for: .default) 
// Sets Bar's Shadow Image (Color) // 
navigationController?.navigationBar.shadowImage = UIImage.imageWithColor(color: .red) 

Düzenleme 1:

Eğer UIImage renk saydamlığını değiştirmeden rect boyutunu ayarlayabilirsiniz böylece uzatma kodu güncellendi.

Düzenleme 2:

Eklenen Swift 3 + Swift 4 kodu.

+0

Biliyor musunuz, neden rectinizin yüksekliğini/genişliğini '' '0,5'' olarak değiştiririm, renk değişir mi? – TIMEX

+0

@TIMEX, kodumu güncelledim, bu artık olmamalı – ZGski

İlgili konular