1. KikurageChan

    No comment

    KikurageChan
Changes in body
Source | HTML | Preview
@@ -1,59 +1,59 @@
# はじめに
こんにちは :leaves:
実装としてはあまり良くないのかもなのですが、アプリ画面を作成する際に
UINavigationControllerのような左右の遷移関係が無くても上側にNavigationBarが欲しい時があり、
私は**NavigationItem**のようなボタンがいい感じに収まるという理由で**UINavigationBar**を生成して使ってしまっています。
そこで、Xcode9.0にて**UINavigationBar**をStoryboardまたはコードで生成すると以下のようになってしまいます。
-<img width="400" alt="sketch222.png" src="https://qiita-image-store.s3.amazonaws.com/0/128250/1149362d-a5d4-6420-5096-d306746a3154.png">
+<img width="450" alt="sketch222.png" src="https://qiita-image-store.s3.amazonaws.com/0/128250/1149362d-a5d4-6420-5096-d306746a3154.png">
# 解決方法
今回はカスタムクラスを作ってそれを充てて利用するようにしました。
Storyboardで正しく表示される方法などもカスタムクラスを作らずとも解決したかったのですが、少し厳しかったです...
```CustomNavigationBar.swift
import UIKit
@IBDesignable class CustomNavigationBar: UINavigationBar {
override func layoutSubviews() {
super.layoutSubviews()
if #available(iOS 11.0, *) {
for subview in self.subviews {
let stringFromClass = NSStringFromClass(subview.classForCoder)
if stringFromClass.contains("BarBackground") {
subview.frame = self.bounds
} else if stringFromClass.contains("BarContentView") {
subview.frame.origin.y = UIApplication.shared.statusBarFrame.height
subview.frame.size.height = self.bounds.height - UIApplication.shared.statusBarFrame.height
}
}
}
}
}
```
※ `@IBDesignable`をつけることでStoryboardにて高さが正しく表示されました。
ただ、描画させるものが特にないため、**本来の目的とは異なる**ので注意が必要です。
※ UINavigationBarの見た目の高さなどを調節しているようです。(UINavigationBarのsubviewsを表示させてみましたが、どれがどのような役割なのか詳しくは調べられませんでした...すみません)
```
UINavigationBar
├── UIBarBackground
├── UINavigationBarLargeTitleView
├── UINavigationBarContentView
└── UINavigationBarModernPromptView
```
# さいごに
Xcode9.0にてUINavigationBarの細かい変更点を完全には確認できなかったので、
今回は動かすための、とりあえずの回避のようになってしまいました...
`safeAreaLayoutGuide`など今後もう少し確認していきたいなと思いました。
# 参考にさせていただいた記事
- [How to change navigationBar height in iOS 11? - stackoverflow](https://stackoverflow.com/questions/46138245/how-to-change-navigationbar-height-in-ios-11/46138389?noredirect=1)
- [iOS 11 navigation bar height customizing - stackoverflow](https://stackoverflow.com/questions/44387285/ios-11-navigation-bar-height-customizing)
見て頂いてありがとうございます。