2017-12-29 17 views
0

は、私が背景グラデーションを作るためにこれを行うことができます:iOS 11と大型のタイトルを使用して、UINavigationBarに背景グラデーションを設定するにはどうすればよいですか? iOSの10で

let gradientColor = UIColor.gradientWithFrame(frame: navigationBar.bounds, colors: [.red, .blue]) 
navigationBar.barTintColor = gradientColor 

、それは大きなタイトルを持っていないときUINavigationBarのサイズを返しますnavigationBar.bounds。これは、繰り返し勾配で、このスクリーンショットには明らかである:

enter image description here

あなたは勾配がnavigationBar.sizeによって返されたサイズが不正なサイズを返すため、繰り返しを開始していることがわかります。

UINavigationBarにグラディエントを設定する別の方法はありますか?

答えて

0

ナビゲーションバーの色合いを「色をクリア」に設定し、グラデーションをバックグラウンドビューに追加します。

+0

。 –

+0

私はこれまでと同じような問題を抱えていましたが、バーを削除してスタンドアロンのボタンを追加したり、バーの背景色をグラデーションの最終色にすることができました。 – gencode

+0

@UpholderOfTruth;高さは 'navBarHeight' +' statusBarHeight' + 'contentInset.top'となります。 – Brandon

0

私の6sデバイスでステータスバーの高さが20であることを考慮する必要があります。UIApplication.shared.statusBarFrame.heightを使用し、この高さをフレームに追加するだけです。

また、私はUIColor(patternImage:)メソッドを使用できるように、CAGradientLayerからUIImageを作成してグラデーションを設定しています。まだあなたがそれを与えるんどの高さの問題を残し

import UIKit 

class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.navigationController?.navigationBar.prefersLargeTitles = true 
    self.title = "Feed me Seymour" 

    if let navFrame = self.navigationController?.navigationBar.frame { 

     //HERE 
     //Create a new frame with the default offset of the status bar 
     let newframe = CGRect(origin: .zero, size: CGSize(width: navFrame.width, height: (navFrame.height + UIApplication.shared.statusBarFrame.height))) 

     let image = gradientWithFrametoImage(frame: newframe, colors: [UIColor.red.cgColor, UIColor.blue.cgColor])! 

     self.navigationController?.navigationBar.barTintColor = UIColor(patternImage: image) 

    } 

} 

func gradientWithFrametoImage(frame: CGRect, colors: [CGColor]) -> UIImage? { 
    let gradient: CAGradientLayer = CAGradientLayer(layer: self.view.layer) 
    gradient.frame = frame 
    gradient.colors = colors 
    UIGraphicsBeginImageContext(frame.size) 
    gradient.render(in: UIGraphicsGetCurrentContext()!) 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return image 
} 

View of Navigation Bar View Hierarchy showing +20 to y offset

関連する問題