69845


XCode11を使用しています。  
UIViewControllerの上にUIViewを配置し、その上にUINavigationBarを配置したのですが、以下の画像のように上部に空白スペースができてしまいます。

[![画像の説明をここに入力](https://i.stack.imgur.com/zCE3x.png)](https://i.stack.imgur.com/zCE3x.png)

UINavigationBarを上下に拡大・縮小する項目も見当たりません。  
ページタイトルの表示位置としては今のままで良いのですが、上部の空白ができてしまうのだけが気になります・・・。  
どうすれば上部に空白スペースを作らずにUINavigationBarを配置することができるのでしょうか？


CC BY-SA 4.0
2020-08-25T00:55:31.857
69842
2020-08-25T01:48:05.103
36446
question
swift xcode
UINavigationBarを配置すると上部に空きスペースができてしまう


`UINavigationController`が表示するNavigation
Barのように、ステータスバー部分を覆うように表示したいということで良いのでしょうか。

`UINavigationBar`を自前で配置するような画面は作ったことがなかったので、少し検索すると、以下のような記事が見つかりました。

[Navigation Bar Behind Status Bar](https://upte.ch/blog/extend-uinavigation-
bar-behind-status-bar/)

図やコード例が詳しく載っているので、英語部分は読まなくても大体わかるかもしれませんが、記事中のコードは、storyboardを使用せずにコードで`UINavigationBar`を設置しているので、storyboardを使った場合に、最低限必要な部分を抜き出しておきます。

[code]

    class ViewController: UIViewController, UINavigationBarDelegate {
        @IBOutlet weak var navigationBar: UINavigationBar!
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
            navigationBar.delegate = self
            //...
        }
    
        func position(for bar: UIBarPositioning) -> UIBarPosition {
            return .topAttached
        }
    
        //...
    }
    
[/code]

`UINavigationBarDelegate`のメソッド`position(for:)`を実装して`.topAttached`を返すようにする必要があるようで、storyboard上だけでの設定はできないようです。

なお、ステータスバー部分を完全に覆うようにするためには、`UINavigationBar`上端のSafe Area
Topにぴったりくっつけておく必要があるようです。

[![Storyboard](https://i.stack.imgur.com/9JFWa.png)](https://i.stack.imgur.com/9JFWa.png)

Storyboardエディタ上での表示は変わりませんが、実行してみると、上部に広がって表示されているのがわかります。

[![simulator](https://i.stack.imgur.com/rR1EY.png)](https://i.stack.imgur.com/rR1EY.png)


CC BY-SA 4.0
2020-08-25T01:48:05.103
69845
2020-08-25T01:48:05.103
13972
69842
answer