详解 iOS navigationBar 的设置问题 详解2 关于隐藏和透明问题

在使用系统自带的NavigationBar时 在设置 透明和背景色时 不是很自由,而且最为严重的问题是 将

self.navigationController.navigationBar.translucent = YES,或者  self.navigationController.navigationBar.translucent = NO时 

控制器的frame会有64个像素的差值,很不好处理。同时也会有很多别的问题,如下的问题:

使用edgesForExtendedLayout = UIRectEdgeNone;后,导航栏想设置为透明,却变黑色   

设置导航栏背景为透明的代码:
复制代码
  1. [self.navigationController.navigationBar setBackgroundImage:[UIImage new]
  2.                                               forBarMetrics:UIBarMetricsDefault];
  3. self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
  4. self.navigationController.navigationBar.shadowImage = [UIImage new];

这时如果使用edgesForExtendedLayout = UIRectEdgeNone;导航栏就会变成黑色.
如果去掉edgesForExtendedLayout = UIRectEdgeNone; 这句话, 就会透明正常... 但这时,view就会顶到最上面,也就不是从导航栏下面开始view。

如何让navigationBar透明的同时上面的navigationItem不透明   

如截图的效果,随着上下拖动,navagationBar渐变出现或隐藏,但两旁的button (或者是item) 没有消失,我只能通过navigationBar的alpha值实现渐变但是上面的item也会消失,请问该如何实现?谢了。
解决办法: 这样就行了 以后没有那么多的麻烦了。 设置navigationBar的背景或透明或隐藏就不会改变Viewcontroller的Fram了!。
#import "UDNavigationController.h"

@implementation UDNavigationController
@synthesize alphaView;
-(id)initWithRootViewController:(UIViewController *)rootViewController{
    self = [super initWithRootViewController:rootViewController];
    if (self) {
        CGRect frame = self.navigationBar.frame;
        alphaView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height+20)];
        alphaView.backgroundColor = [UIColor blueColor];
        [self.view insertSubview:alphaView belowSubview:self.navigationBar];
//        [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"bigShadow.png"] forBarMetrics:UIBarMetricsCompact];
        
        [self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsCompact];
        
        self.navigationBar.layer.masksToBounds = YES;
       
        
//        self.navigationBar.translucent
        
//        NSLog(@"the translucent is %", self.navigationBar.translucent );
        
        NSLog(@"the translucent is: %@" ,self.navigationBar.translucent ? @"YES" : @"NO");
        
        
    }
    return self;
}
-(void)setAlph{
    if (_changing == NO) {
        _changing = YES;
        if (alphaView.alpha == 0.0 ) {
            [UIView animateWithDuration:0.5 animations:^{
                alphaView.alpha = 1.0;
            } completion:^(BOOL finished) {
                 _changing = NO;
            }];
        }else{
            [UIView animateWithDuration:0.5 animations:^{
                alphaView.alpha = 0.0;
            } completion:^(BOOL finished) {
                _changing = NO;

            }];
        }
    }
}

-(void)setBackGroundImage{
//    alphaView.backgroundColor = [UIColor yellowColor];
    
    alphaView.image = [UIImage imageNamed:@"zapya_navgation_bar_img.png"];
    
}

@end

参考文章:http://www.cocoachina.com/bbs/read.php?tid=280506

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值