2016-05-16 10 views
7

私は多くのスレッドを読みましたが、Swiftの最新バージョンについてはっきりとした一貫した答えでこの問題を解決した人はいませんでした。UINavigationBarの下端の色を変更するにはどうすればよいですか?

たとえば、this questionの先頭の回答はUINavigationBar.appearance().setShadowImage()です。しかし、このような方法は最新のswiftには存在しません。

I 下の境界を非表示にしたくない。私はちょうどに色を変更したい

さらに、高さを変えることができれば嬉しいですが、私は1つの質問であまりにも多くのことを聞いています。

編集:私は2×1ピクセルの画像を作成し、ShadowImageのに設定しますが、ボーダーは変わらない:

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

ここに画像があります。それは実際には小さいです:border image

+2

影の画像がまだ存在するので、あなたは 'UINavigationBar.appearance()。shadowImage = ...を行う必要があります'Swiftで – dan

+0

誰もが自動補完がshadowImageを表示しない理由を知っていますか? (しかし実際には存在します) – TIMEX

+0

これは 'UINavigationBar.appearance()'でアクセスできないためです。 – ZGski

答えて

0

UISomeClass.setSomething(whatIWantToSet)のような古いUIKitセッターメソッドは、=という記号で直接設定できるように改訂されました。したがって、私の例では、UISomeClass.something = whatIWantToSetを使用する必要があります。

あなたの場合はUINavigationBar.appearance().shadowImage = whatYouWantToSetです。

13

SWIFT 2.xの:利便性のうち

、私は私は基本的に、すぐに次のコードを持つ色としてそれを使用できるようにするUIImage()を拡張しました。

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 
    } 
} 

次は、このインスタンスでのViewControllerのUINavigationBarの影の画像、または色を調整するために、あなたのコードに次の行を追加したいと思うでしょう。

// 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の:

拡張コード:

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コード:

// 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) 

編集1:

あなたはUIImage色の不透明度を変更することなく、矩形サイズを調整することができるように拡張コードを更新。

編集2:

追加さスウィフト3 +スイフト4コード。

+0

私はrectの高さ/幅を' '' 0.5'''に変更する理由を知っていますか? – TIMEX

+0

@TIMEX、私はこれ以上発生しないように自分のコードを更新しました – ZGski

関連する問題