1.设置translucent
属性为NO
self.navigationController.navigationBar.translucent = YES;
translucent
是控制UINavigationBar
半透明的属性,当translucent
设置为NO
时,UINavigationBar
下面的视图将会下移,与UINavigationBar
的底部对齐。如下图示例中,UITableView
从UINavigationBar
的底部开始布局
从上图可以看出UINavigationBar
里面有一个UIBarBackground
视图,其实在UIBarBackground
中有一个UIImageView
视图(如图2可以看出)。只有我们通过下面的代码设置图片才会创建这个UIImageView
,否则不会创建
- (void)setBackgroundImage:(nullable UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
2.设置translucent
属性为YES
self.navigationController.navigationBar.translucent = YES;
当translucent
属性设置为YES
时,UITableView
会在UINavigationBar
的下面,UITableView
的顶部和UINavigationBar
对齐。默认情况下会在UINavigationBar
的UIBarBackground
视图中设置一个模糊视图UIVisualEffectView
,如图3。
当通过setBackgroundImage:forBarMetrics:
设置背景图片时,这个模糊视图就不会创建,而是创建一个UIImageView
。如下图:
- (void)setBackgroundImage:(nullable UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
总结
设置UITableView从顶部开始布局,并且让UINavigationBar透明的方法为
- 设置
translucent
为YES
- 给
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;
}