前提・実現したいこと
Swiftで制作中のアプリのnavigationBarの色を調整したい。
ここに質問の内容を詳しく書いてください。
Swiftの勉強のためTwitterを再現しようとしているのですが、ヘッダーを作っている所で躓いています。
Twitterのタイムラインのページのヘッダーはtranslucentが効いた状態で全体の背景色と同じ色になっていますが、私が再現できる限りではどうしてもヘッダーの色が微妙に違ってしまいます。
navigationBarのtranslucentが効いた状態で全体の背景色と同じ色にする事は可能でしょうか?
可能だとしたらその方法もご教示いただけると助かります。
発生している問題・エラーメッセージ
エラーは特にありませんが、UIVisualEffectView(effect: UIBlurEffect(style: .dark))としてTableViewの背景色と違ってしまう分、navigationController?.navigationBar.barTintColorを調節するなどして色合いを合わせようとしましたが、完璧に同じ色にするのは困難でした。
StoryBoardでもnavigationBarのスタイルを変えたりしましたが、DefaultでもBlackでも色合いが合いませんでした。
UIBlurEffectのStyleをregularにしてダークモードに対応するようにしたのですが、やはりヘッダーと全体の背景色は微妙に違ってしまいます。
こちらが私がTwitterを再現しようとして作っているアプリの状態です。
ヘッダーが全体の背景色よりも微妙に暗い色になってしまっています。
translucentを効かせるとどうしても同じ色になりません。
こちらは上の画像に赤枠と白線を付けたものです。
赤線で囲っている部分の白線の延長線上に色の境界があります。
こちらは上の画像の左半分を拡大したものです。
赤枠で囲っている部分の白線の延長線上に色の境界があります。
白線より上がヘッダーで黒いですが、白線より下TableViewは濃い紺色(R:23 G:32 B:42)です。
こちらが本家Twitterのヘッダーです。全体の背景色とヘッダーの色は同じ色です。
この状態でtranslucentも効いています。
こちらが私がTwitterを再現しようとして作っているアプリの状態その2です。
TableViewの色が濃い紺色(Twitterのダークモードと同じ色)なのに対して、ヘッダーは黒になってしまっています。
translucentをtrueにする事で、すりガラス効果は得られているのですが、色を指定するとすりガラス効果が失われてしまいます。
また、すりガラス効果も本家のTwitterのヘッダーと比較するとかなりぼやけてしまっていて、よく見ないと透けているのか
分からない感じです。
上の画像と同じ、Twitterを再現しようとして作っているアプリの状態その2です。
境界は以下の画像の赤枠の中、白線の延長上にあります。
こちらが本家Twitterのヘッダーその2です。すりガラス効果で背景の文章がぼやけて透けていますが、同時にTableViewの色と同じ色にする事も実現しています。これは色の問題が解決したら取り組もうと思っているのですが、すりガラス効果の度合いも私がマネしたものとは違い、文字やプロフィール画像の輪郭がぼんやり見えています。
ヘッダーのプロフィール画像の形やツイートした画像の表示される大きさなどは今後修正していく予定ですが、
その2は同じツイートの文章をヘッダーで透かしています。
これはかなり見えにくいかと思いますが、上の画像と同じ画像です。
赤丸の部分にぼんやりとツイートした人のプロフィール画像が透けていて、赤線の上にぼんやりと文章が透けています。
該当のソースコード
Swift
1 2//viewDidLoad内で呼び出している関数です。 3 4extension UIViewController { 5 private final class StatusBarView: UIView { } 6 7 func setStatusBarBlur() { 8 let statusBarFrame = UIApplication.shared.statusBarFrame 9 let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .regular)) 10 visualEffectView.frame = statusBarFrame 11 view.addSubview(visualEffectView) 12 visualEffectView.translatesAutoresizingMaskIntoConstraints = false 13 visualEffectView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true 14 visualEffectView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true 15 visualEffectView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true 16 if #available(iOS 11.0, *) { 17 visualEffectView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor).isActive = true 18 } else { 19 // Fallback on earlier versions 20 } 21 } 22
試したこと
ここに問題に対して試したことを記載してください。
まずtableViewの色を青(R:0 G:0 B:255)にしてnavigationBarもstatusBarも指定なしでヘッダーが何色になるか試しました。(スマホをダークモードにしていたためか、黒になりました。)この黒の部分にすりガラス効果はありませんでした。
次にtableViewの色は青のままにして、navigationBarのbarTintColorをtableviewと同じ青にしました。また、navigationBarの下のボーダーを消す設定を試しました。
これでnavigationBarとtableViewが同じ色にはなりましたが、すりガラス効果はありません。
その次はすりガラス効果を得るためにnavigationBarに.isTranslucent = trueを設定してみましたが、すりガラス効果は得られませんでした。
今度はすりガラス効果が無効にならないようにbarTintColorを削除して、Translucentのみが効くようにしてみました。Translucentは効いたのですが、ヘッダーはtableViewよりも暗くなってしまいます。
文字が背景だと透けているか分かりにくいのですが、画像が背景だとぼやけて透けている事が分かります。しかしヘッダーの色は暗めになってしまい、TableViewと同じ色になりません。
barTintColorとTranslucentは両立できないとの事だったのでbackgroundColorとTranslucentも試してみたのですが、backgroundColorが不透明で表示され、すりガラス効果は得られませんでした。
また、navigationBarを透明にしてstatusBarにすりガラス効果を付けた場合どうなるかと思い、statusBarをUIVisualEffectView(effect: UIBlurEffect(style: .dark))としてみましたが、statusBarを透明にしてもstatusBarが若干暗い色になってしまいます。
以上の事を試し、ここまでに「navigationBar すりガラス効果」とか「navigationBar すりガラス効果 度合い」、「statusBar すりガラス効果 色」など、色々検索してみましたが、navigationBar,StatusBarなどの色合いやすりガラス効果の度合いを調整できるという情報には行き当たりませんでした。
補足情報(FW/ツールのバージョンなど)
Xcode11.6
iPhoneSE
iOS13.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/01 09:24 編集
2022/01/01 11:48 編集
2022/01/08 03:53 編集
2022/01/08 03:57 編集
2022/01/08 13:35
2022/01/08 14:31
2022/01/08 19:00
2022/01/14 21:00