iOS UINavigationController中使用UITableView,设置UINavigationBar透明

1.设置translucent属性为NO

self.navigationController.navigationBar.translucent = YES;

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

iOS UINavigationController中使用UITableView,设置UINavigationBar透明_第1张图片
translucent = NO;setimge = NO

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

- (void)setBackgroundImage:(nullable UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
iOS UINavigationController中使用UITableView,设置UINavigationBar透明_第2张图片
translucent = NO;setimge = YES

2.设置translucent属性为YES

self.navigationController.navigationBar.translucent = YES;

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

iOS UINavigationController中使用UITableView,设置UINavigationBar透明_第3张图片
translucent = YES;setimge = NO

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

- (void)setBackgroundImage:(nullable UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
iOS UINavigationController中使用UITableView,设置UINavigationBar透明_第4张图片
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中使用UITableView,设置UINavigationBar透明)