rnystrom/RNFrostedSidebar という、半透明メニューバーを使おうと思っていたら、どうしてもUINavigationBarの部分が黒くぼやけてしまう問題が発生した。色々いじって解消したのでメモ。
そもそも、UINavigationBarにはtranslucentというプロパティがある。半透明ですってプロパティ。このプロパティをNOにすると半透明ではなくなる。UIViewのopaqueプロパティに似てるかも。
で、常にUINavigationBarを非透過にするのは嫌なので、スクリーンショットを撮る瞬間だけ、透過にする。こんな感じ。
self.navigationController.navigationBar.translucent = NO; // ここでスクリーンショットを撮る。僕の場合はここでRNFrostedSidebarをshowする。 self.navigationController.navigationBar.translucent = YES;
コードの中を探っていくとRNFrostedSideBarはshowの時に、画面のスクリーンショットを撮っているのでこのタイミングに書くと、UINavigationBarが非透過になってうまくスクリーンショットが撮れる。
RNFrostedSidebarは簡単にきれいなメニューが表示できて楽ちん。変にTabBarControllerやNavigationControllerを継承したりしていないので、自分のコードと分離して管理できて使い勝手が良い。もし他のメニューが良ければ、取り替えればいいだけだしね!