摘自:http://www.reibang.com/p/d0a523659f08
感謝原作者
根據(jù)偏移量葱蝗,動態(tài)修改狀態(tài)欄的顏色
碼代碼到現(xiàn)在,剛剛做了個小需求细燎,根據(jù)偏移量動態(tài)修改狀態(tài)欄的顏色两曼。
剛開始我是這樣想的,根據(jù)偏移量玻驻,直接修改狀態(tài)欄的顏色就好了悼凑。
于是,便有了下面的代碼璧瞬。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.y <= -20) {
self.navigationController.navigationBar.barStyle = UIStatusBarStyleDefault;
} else {
self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
}
}
寫完一運行户辫,貌似并沒有起作用啊。谷歌上百度了一下嗤锉,沒有看到相關(guān)動態(tài)修改狀態(tài)欄顏色的東西渔欢,有可能是手法不對。還有就是這個問題太low瘟忱,沒有人問過奥额。想了一下,其實最主要的還是修改狀態(tài)欄的顏色访诱〉姘ぃ可能因為每個項目自身的一些情況,修改狀態(tài)欄顏色的方法不一定都起作用触菜。接下來我定義了一個全局的屬性記錄偏移量九榔,然后在滾動的代理方法中賦值并且調(diào)用UIViewController
的- (void)setNeedsStatusBarAppearanceUpdate
方法。然后重寫系統(tǒng)的- (UIStatusBarStyle)preferredStatusBarStyle
方法。在這個方法中去改變狀態(tài)欄的顏色帚屉。代碼如下:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
self.offset = scrollView.contentOffset.y;
[self setNeedsStatusBarAppearanceUpdate];
}
- (UIStatusBarStyle)preferredStatusBarStyle {
if (self.offset <= -20) {
return UIStatusBarStyleDefault;
}
return UIStatusBarStyleLightContent;
}
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {
return UIStatusBarAnimationFade;
}
如果不是經(jīng)過導(dǎo)航欄包裝的控制器的話谜诫,到這里就可以實現(xiàn)根據(jù)偏移量修改狀態(tài)欄的顏色了。如果你的控制器是經(jīng)過導(dǎo)航控制器包裝的攻旦,你需要自定義一個導(dǎo)航控制器繼承自UINavigationController
喻旷,重寫
- (UIViewController *)childViewControllerForStatusBarStyle
方法
- (UIViewController *)childViewControllerForStatusBarStyle {
return self.topViewController;
}
讓狀態(tài)欄的顏色由控制器自己去決定。
雖然都是一些簡單的小東西牢屋,在日常開發(fā)中也不太會注意這些細節(jié)且预。遇到了就記下來,希望能幫助到需要的人烙无。也加深自己的印象锋谐。寫完收工。睡醒了再繼續(xù)coding截酷。涮拗。。最后補一張效果圖就滾去睡覺了迂苛!