iOS11.0でUINavigationBarの高さが正しく表示されない現象について
はじめに
こんにちは
実装としてはあまり良くないのかもなのですが、アプリ画面を作成する際に
UINavigationControllerのような左右の遷移関係が無くても上側にNavigationBarが欲しい時があり、
私はNavigationItemのようなボタンがいい感じに収まるという理由でUINavigationBarを生成して使ってしまっています。
そこで、Xcode9.0にてUINavigationBarをStoryboardまたはコードで生成すると以下のようになってしまいます。
解決方法
今回はカスタムクラスを作ってそれを充てて利用するようにしました。
Storyboardで正しく表示される方法などもカスタムクラスを作らずとも解決したかったのですが、少し厳しかったです...
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
など今後もう少し確認していきたいなと思いました。
参考にさせていただいた記事
見て頂いてありがとうございます。
Author And Source
この問題について(iOS11.0でUINavigationBarの高さが正しく表示されない現象について), 我々は、より多くの情報をここで見つけました https://qiita.com/KikurageChan/items/4152c2d8ac89c601a054著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .