方法を調べたものの、見つけた方法は面倒そうなのばっかりで少し考えてみたら少し簡単にやる方法を見つけたのでメモ
適当にfakeNavibar
とでも名前をつけて一つview
を用意しておく。この時、frame
はnavigationBar
と同じ値にして、ビュー階層はnavigationBar
の下にしておく。色も同じにするのを忘れずに。
navibar.swift
class FakeNavibarController:UINavigationController{
var fakeNavibar:UIView!
override viewDidLoad(){
super.viewDidLoad()
self.fakeNavibar = UIView(frame:self.navigationBar.frame)
self.fakeNavibar.backgroundColor = UIColor.balckColor()//ナビゲーションバーと同じ色
self.view.insertSubview(self.fakeNavibar, belowSubview: self.navigationBar)
あとはnavigationBar
を動かす時にfakeNavibar
も一緒に動かして、navigationBar
だけ透過させていく。
例えばスクロールする毎に呼び出すメソッドを用意しておいて
navibar.swift
func naviBarFade(diffY:CGFloat){
let statusBar = UIApplication.sharedApplication().statusBarFrame
let rate = self.navigationBar.frame.origin.y/statusBar.frame.height
self.navigationBar.alpha = rate
self.navigationBar.frame.origin.y -= diffY
self.fakeNavibar.frame.origin.y = self.navigationBar.frame.origin.y
}
とでもしておけば簡単にできた。単純にナビゲーションバーそのものを透過させていって、その下に同じいろのビューがあるのでアイテムだけ消えていくFacebookアプリ的なことができる。
もっと簡単な方法あるのかな。