美文网首页
iOS UINavigationController中使用UIT

iOS UINavigationController中使用UIT

作者: __Simon__ | 来源:发表于2017-07-21 10:19 被阅读142次

    1.设置translucent属性为NO

    self.navigationController.navigationBar.translucent = YES;
    

    translucent是控制UINavigationBar半透明的属性,当translucent设置为NO时,UINavigationBar下面的视图将会下移,与UINavigationBar的底部对齐。如下图示例中,UITableViewUINavigationBar的底部开始布局

    translucent = NO;setimge = NO

    从上图可以看出UINavigationBar里面有一个UIBarBackground视图,其实在UIBarBackground中有一个UIImageView 视图(如图2可以看出)。只有我们通过下面的代码设置图片才会创建这个UIImageView,否则不会创建

    - (void)setBackgroundImage:(nullable UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
    
    translucent = NO;setimge = YES

    2.设置translucent属性为YES

    self.navigationController.navigationBar.translucent = YES;
    

    translucent属性设置为YES时,UITableView会在UINavigationBar的下面,UITableView的顶部和UINavigationBar对齐。默认情况下会在UINavigationBarUIBarBackground视图中设置一个模糊视图UIVisualEffectView,如图3。

    translucent = YES;setimge = NO

    当通过setBackgroundImage:forBarMetrics:设置背景图片时,这个模糊视图就不会创建,而是创建一个UIImageView。如下图:

    - (void)setBackgroundImage:(nullable UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
    
    translucent = YES;setimge = YES

    总结

    设置UITableView从顶部开始布局,并且让UINavigationBar透明的方法为

    • 设置translucentYES
    • UINavigationBar设置一个透明的背景图
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        
        self.navigationController.navigationBar.translucent = YES;
        // shadowImage 是UINavigationBar的分割线
        self.navigationController.navigationBar.shadowImage = [self createImageWithColor:[UIColor clearColor]];
        [self.navigationController.navigationBar setBackgroundImage:[self createImageWithColor:[UIColor clearColor]] forBarMetrics:(UIBarMetricsDefault)];
        
        
    }
    
    // 通过颜色生成图片
    - (UIImage*)createImageWithColor:(UIColor*)color{
        
        CGRect rect=CGRectMake(0.0f,0.0f,1.0f,1.0f);UIGraphicsBeginImageContext(rect.size);
        
        CGContextRef context=UIGraphicsGetCurrentContext();
        CGContextSetFillColorWithColor(context, [color CGColor]);
        
        CGContextFillRect(context, rect);
        
        UIImage*theImage=UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return theImage;
        
    }
    

    相关文章

      网友评论

          本文标题:iOS UINavigationController中使用UIT

          本文链接:https://www.haomeiwen.com/subject/rgbskxtx.html