第一种方法:这是唯一一个隐藏这条线的官方用法,但是有一个缺陷-删除了translucency(半透明)
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
//去除导航栏下方的横线
UINavigationBar *navigationBar = self.navigationController.navigationBar;
// bgm.png为自己ps出来的想要的背景颜色
[navigationBar setBackgroundImage:[UIImage imageNamed:@"bgm.png"]
forBarPosition:UIBarPositionAny
barMetrics:UIBarMetricsDefault];
[navigationBar setShadowImage:[UIImage new]];
}
第二种方法:
// 给导航条的背景图片传递一个空图片的UIImage对象
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
// 隐藏底部阴影条,传递一个空图片的UIImage对象
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
第三种方法:
1)声明UIImageView变量,存储底部横线
1
2
3
|
@implementation
MyViewController {
UIImageView *navBarHairlineImageView;
}
|
2)在viewDidLoad中加入:
1
|
navBarHairlineImageView = [
self
findHairlineImageViewUnder:navigationBar];
|
3)实现找出底部横线的函数
1
2
3
4
5
6
7
8
9
10
11
12
|
- (UIImageView *)findHairlineImageViewUnder:(UIView *)view {
if
([view isKindOfClass:UIImageView.
class
] && view.bounds.size.height <= 1.0) {
return
(UIImageView *)view;
}
for
(UIView *subview in view.subviews) {
UIImageView *imageView = [
self
findHairlineImageViewUnder:subview];
if
(imageView) {
return
imageView;
}
}
return
nil
;
}
|
4)最后在viewWillAppear,viewWillDisappear中处理
1
2
3
4
5
6
7
8
9
|
- (
void
)viewWillAppear:(
BOOL
)animated {
[
super
viewWillAppear:animated];
navBarHairlineImageView.hidden =
YES
;
}
- (
void
)viewWillDisappear:(
BOOL
)animated {
[
super
viewWillDisappear:animated];
navBarHairlineImageView.hidden =
NO
;
}
|