2017-02-21 3 views
0

1つのNavigationControllerに複数のVCが埋め込まれています。 私は1つのVCを持っています、VCNotTransparentという名前をつけて、バーは透明でないようにしてください。他のVCでは透明にします。 だからメインのVCで、私はバーの透明化のためにこれらの行を追加しました:Swift - 既存のものを上書きするナビゲーションバーを追加する

 navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) 
     navigationController?.navigationBar.shadowImage = UIImage() 
     navigationController?.navigationBar.isTranslucent = true 

は、だから今、私のバーのすべてのアプリで透明です。 VCNotTransparentを他のVCのすべてを変更せずに透明にできないようにするにはどうすればよいですか?私が考えた解決策の1つは、VCNotTransparentにのみ新しいナビゲーションバーを追加することですが、その方法はわかりません。

EDIT

私もほとんど機能し、独自のNavigationControllerでVCNotTransparentを埋め込むしようとしたが、問題は、私はいくつかの他のVCのにからのナビゲーションを持っていることであり、彼らはサブナビゲーションですので、彼らは、同様に透明ではなくなりますVCNotTransparentの列挙型によって

答えて

1

ハンドルこの -

あなたMainVC以内に下記のですか -

public enum NavigationType: Int { 
case transparent = 1 
case notTransparent = 2 
} 

var currentNavigationType: NavigationType? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.currentNavigationType = .transparent // default 
    self.setupNavigationControllerStyle() 
} 

func setupNavigationControllerStyle(){ 
switch self.currentNavigationType! { 
    case .transparent: 
     //do code here for transparent 
    case .notTransparent: 
     //do code here for not transparent 
    default: 
     break 
    } 

} 

それは透明のバーが表示されますデフォルト。どのコントローラーで透明バーが必要ないのですか?

class VCNotTransparent: MainVC { 

override func viewWillAppear(_ animated: Bool) { 
    self.currentNavigationType = .notTransparent 
    super.viewWillAppear(animated) 

    } 
} 
+0

これはソリューションの良い方向に見えますが、私はそれを感謝します。受け入れられたとマークするのに欠けていることの1つは、透明でないコードが何であるか分かりません(func setupNav内...)。私は背景を透明にするために空のイメージを使用していたので、透明でない状態に戻す方法がわかりません。 – Sharonica

+0

これはあなたに役立つかもしれません。http://stackoverflow.com/questions/42332547/swift-3-how-to-reverse-a-transparent-navigation-bar –

+0

ありがとう、それは少し助けますが、それは問題は、透過的でない透明なバーに戻るときに、バーはただ遅れて透明になります(vcライフサイクルで正しい関数に変更を加えたとしても) – Sharonica

関連する問題