2016-04-30 9 views
1

私は、アプリのホームページにヘアラインが隠された白いナビゲーションバーと、残りのページに緑色のナビゲーションバーがあるアプリを開発しています。私がこれまで行ってきたことは、ホームページのナビゲーションバーのコードを独自の.swiftファイルに入れていますが、ホームページのボタンを使って他のページに移動すると、(メニューバーとは対照的に) )ナビゲーションバーはまだ白に設定されています。ヘアラインを削除するコードは、ボタンからアクセスすると他のページに移動するためです。Swiftでヘアラインを取り消すにはどうすればいいですか?

これは私のページは、理想的にどのように見えるかです:代わりに、このモジュールのページがどのように見えるされ Homepage & Module

Module Page Now

これは私が使用しているコードです - 誰も私を助けることができるかどうか迷っコードを逆にする方法や代替の解決策があるかどうかを調べる。

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    // Set navigation bar tint/background colour 
    self.navigationController?.navigationBar.barTintColor = UIColor.whiteColor() 

    // Set Navigation bar Title colour 
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.blackColor()] 

    //Set navigation bar Back button tint colour 
    self.navigationController?.navigationBar.tintColor = UIColor.blackColor() 

    //Get Rid of 1px hairline 
    self.navigationController?.navigationBar.setBackgroundImage(
     UIImage(), 
     forBarPosition: .Any, 
     barMetrics: .Default) 

    self.navigationController?.navigationBar.shadowImage = UIImage() 

} 

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 

    // Set navigation bar tint/background colour 
    self.navigationController?.navigationBar.barTintColor = UIColor(red: 0/255, green: 127/255, blue: 106/255, alpha: 1) 

    // Set Navigation bar Title colour 
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()] 

    //Set navigation bar Back button tint colour 
    self.navigationController?.navigationBar.tintColor = UIColor.whiteColor() 

    //Reverse get Rid of 1px hairline code 
    /*self.navigationController?.navigationBar.setBackgroundImage(
     UIImage(), 
     forBarPosition: .Any, 
     barMetrics: .Default) 

    self.navigationController?.navigationBar.shadowImage = UIImage()*/ 
} 
+0

「ヘアライン」とはどういう意味ですか? –

+0

@AlessandroOrnanoナビゲーションバーの底に接する1pxライン – zenpain

答えて

0

これを解決するには、viewWillDisappearメソッドでコードを逆順にするだけでした。

//Reverse get Rid of 1px hairline code 
self.navigationController?.navigationBar.setBackgroundImage(nil, forBarMetrics: .Default) 
0

あなたは一般的な方法(例えば、Utils.swiftのために呼ばれる)を持つカスタム迅速なファイルを作成し、あなたの関数を挿入し、その後、次のコントローラでそれを呼び出すことができます使用してそれを呼び出すには

import Foundation 
import UIKit 

//MARK: - General methods: 
    func customizeNavigationController(navigationController:UINavigationController) { 
      navigationController.navigationBar.backgroundColor = UIColor.greenColor() 
      navigationController.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) 
      navigationController.navigationBar.barTintColor = UIColor.greenColor() 
      navigationController.navigationBar.tintColor = UIColor.blackColor() 
      navigationController.navigationBar.barStyle = UIBarStyle.Black 
      navigationController.navigationBar.translucent = false 
      navigationController.navigationBar.clipsToBounds = false 
      navigationController.navigationBar.shadowImage = nil 
      self.setNeedsStatusBarAppearanceUpdate() 
     } 

     func changeNavHairLines(navigationController:UINavigationController, show:Bool) { 
      for subview in navigationController.navigationBar.subviews { 
       for view in subview.subviews { 
        if(view.frame.size.height < 4) { 
         if show == true { 
          view.alpha = 1.0 
         } else { 
          view.alpha = 0.0 
         } 
        } 
       } 
      } 
     } 

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 
    // choose if you want to show or hide hairLines 
    changeNavHairLines(self.navigationController!,show:false) 
    customizeNavigationController(self.navigationController!) 
} 
+0

うん、私はホームページから離れて、他のページにボーダーヘアラインを保持してうれしいです。ホームページが読み込まれたときに背景を設定するコードが既に起動されている場合、他のページの背景画像/影画像を取り除くにはどうすればよいですか?もしこれが意味をなさないのであれば、ごめんなさい。 – zenpain

+0

これを見て、私はこの奇妙な線を削除する関数を追加しました –

0
  1. viewDidLoadviewWillAppearにおいて...細い黒線を削除します関連細い黒線を削除する場所:

    //ナビゲーションバーの下部にある細い黒い線を削除します。あなたがあなたの「ホームページ」のために行ったように異なるナビゲーションバーの出演とその色と関連するプロパティについて

    for parent in self.navigationController!.navigationBar.subviews { 
         for childView in parent.subviews { 
          if(childView is UIImageView) { 
           childView.removeFromSuperview() 
          } 
         } 
        } 
    
  2. 、など理由だけで、各ビューのナビゲーションバーのプロパティをカスタマイズしませんか?

+0

これを試しましたが、 "// 1pxヘアラインを取り除く"コードは、ホームページのボタンを介してナビゲートすると他のページに移動します。まだ白/透明である。私はこのコードを元に戻す方法を知らないのですか? – zenpain

0

navigationControllerのnavigationBarはアプリケーション全体で共有されているため、1つのコントローラで削除すると、アプリケーション全体で削除されます。ヘアラインを削除したいコントローラのnavigationBarを非表示にし、NavigationBarをInterface Builder経由で手動で配置する方法はありますか?

でメインビューに戻るときは、navigationBarを非表示にすることができます:viewWillAppear

self.navigationController?.setNavigationBarHidden(true, animated: true) 

置き、この。

そして、再びそれを示しています。viewWillDisappear

self.navigationController?.setNavigationBarHidden(false, animated: true) 

+0

ええ、それは私がやろうとしたことです。今のところ、メニューバーからアクセスすると、私のModulesページのnavigationBarがうまく表示されます。しかし、HomePageのボタンを使ってアクセスすると、ナビゲーションはまだ隠されています...私はviewWillDisappearを介して隠れビットを元に戻す必要があると思いますが、どうすればよいか分かりません。 – zenpain

関連する問題