導(dǎo)航欄不同于其他view,簡單的設(shè)置alpha并不能達(dá)到預(yù)想的效果。我在多次嘗試之后得出一個(gè)最有效的方式。
簡單的讓導(dǎo)航欄變透明只需要設(shè)置下面三個(gè)屬性:
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc]init]];
self.navigationController.navigationBar.alpha = 0;
但是這樣做有個(gè)問題,就是返回按鈕和title一起變透明了,解決方法是不要通過alpha來改變透明度,而是通過改變backgroundImage的透明度來實(shí)現(xiàn)。如何改變圖片的透明度呢,送上一個(gè)方法,你只需要?jiǎng)?chuàng)建一個(gè)UIImage的分類,實(shí)現(xiàn)這個(gè)方法,在需要的時(shí)候引入這個(gè)分類就可以使用了。
- (UIImage *)imageByApplyingAlpha:(CGFloat) alpha{
UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0f);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGRect area = CGRectMake(0, 0, self.size.width, self.size.height);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -area.size.height);
CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
CGContextSetAlpha(ctx, alpha);
CGContextDrawImage(ctx, area, self.CGImage);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
這樣以來,你只需要將你需要的圖片(也許是一張純色)通過setBackgroundImage:forBarMetrics:
方法設(shè)置為背景圖片即可。
通過view的滾動(dòng)實(shí)現(xiàn)一開始navigationBar隱藏,然后漸顯的效果還難嗎?
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (scrollView.contentOffset.y <= 100) {
self.navigationController.navigationBar.alpha = scrollView.contentOffset.y / 100;
}
}
不過你可能發(fā)現(xiàn),頁面剛剛顯示還沒有滾動(dòng)的時(shí)候,導(dǎo)航欄又不透明了,如果你不幸遇到這種狀況,其實(shí)也很簡單
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
self.navigationController.navigationBar.alpha = 0;
}
是不是非常簡單?喜歡的話記得點(diǎn)紅心??啊。也歡迎評(píng)論與我交流??