StoryboardのNavigation Barの存在理由


`Storyboard`でUIを配置していく時に、画面右下から`Navigation
Bar`を選択して`ViewController`に配置してみるのですが、`NavigationController`のナビゲーションバーのようになりませんよね？`ViewController`の上に配置しても`NavigationController`のナビゲーションバーと縦のサイズが違いますし、それに`Navigation
Item`を引っ張ってきて配置しても`Navigation Bar`には反映されません。この`Navigation
Bar`は一体何のためにあるのでしょうか？`NavigationController`のナビゲーションバーとは別物と考えたほうがいいでしょうか？




Storyboardが登場してからは、ナビゲーションコントローラと中身のビューコントローラを一緒にInterface
Builderで作ることができるようになったので、Navigation Barを単体で配置するのはレアケースだと思います。

使い方としては、ナビゲーションコントローラは必要ないけど、見た目を同じにしたいとか、上部にバーと閉じるボタンを配置したいとか、そういうときに使います。

特にStoryboardが登場する以前は、ビューに単体でNavigation
Barを配置して、タイトルと左右にボタンを置いて、モーダルビューで表示する、といったときに簡単にInterface
Builderだけで作れて便利とかそんな感じで使います。

似ている例を言うと、Search BarとSearch Display Controllerの関係とか。Search Display
Controllerを使うほどじゃないけど、Search Barを置いて検索できるようにしたいというときはSearch Barだけ使う、のと同じです。

といったものなので、特に今までNavigation Barを使ったことがなくて、それで困っていないなら特に気にすることはありません。

ちなみに、ナビゲーションコントローラを使った場合と比べて高さが異なるというのは勘違いで、iOS
7からステータスバーと一体化した見た目になったのでそのように見えるだけで、ビゲーションコントローラを使ったときと同じ見た目にすることは可能です。  
ビューコントローラにナビゲーションバーをステータスバーの高さだけ下げて設置して、デリゲートを接続して、そのデリゲートで下記のメソッドを実装します。

[code]

    - (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar {
        return UIBarPositionTopAttached;
    }
    
[/code]

ここで`UIBarPositionTopAttached`を返すと、ステータスバーと一体化した見た目にしてくれます。

まとめると、今となっては単体で使うことはあまりないですが、必要ならナビゲーションコントローラを使わないときでも同様の見た目にしたり、ナビゲーションバーの機能を使うことができる、というためにあります。




Storyboardが登場してからは、ナビゲーションコントローラと中身のビューコントローラを一緒にInterface
Builderで作ることができるようになったので、Navigation Barを単体で配置するのはレアケースだと思います。

使い方としては、ナビゲーションコントローラは必要ないけど、見た目を同じにしたいとか、上部にバーと閉じるボタンを配置したいとか、そういうときに使います。

特にStoryboardが登場する以前は、ビューに単体でNavigation
Barを配置して、タイトルと左右にボタンを置いて、モーダルビューで表示する、といったときに簡単にInterface
Builderだけで作れて便利とかそんな感じで使います。

似ている例を言うと、Search BarとSearch Display Controllerの関係とか。Search Display
Controllerを使うほどじゃないけど、Search Barを置いて検索できるようにしたいというときはSearch Barだけ使う、のと同じです。

といったものなので、特に今までNavigation Barを使ったことがなくて、それで困っていないなら特に気にすることはありません。

ちなみに、ナビゲーションコントローラを使った場合と比べて高さが異なるというのは勘違いで、iOS
7からステータスバーと一体化した見た目になったのでそのように見えるだけで、ビゲーションコントローラを使ったときと同じ見た目にすることは可能です。  
ビューコントローラにナビゲーションバーをステータスバーの高さだけ下げて設置して、デリゲートを接続して、そのデリゲートで下記のメソッドを実装します。

[code]

    - (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar {
        return UIBarPositionTopAttached;
    }
    
[/code]

ここで`UIBarPositionTopAttached`を返すと、ステータスバーと一体化した見た目にしてくれます。

まとめると、今となっては単体で使うことはあまりないですが、必要ならナビゲーションコントローラを使わないときでも同様の見た目にしたり、ナビゲーションバーの機能を使うことができる、というためにあります。

