最近在做的项目有这个需求,需要中navigationBar上显示较多的内容,而系统中默认navigationBar的高度为44。
于是便在网上查找相关的内容,但很多都达不到预期及结果。
方法一:在《如何自定义NavigationBar的高度》这篇文章中谈到如下的方法:
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
CGRect rect = self.navigationController.navigationBar.frame;
self.navigationController.navigationBar.frame = CGRectMake(rect.origin.x,rect.origin.y,rect.size.width,84);
[self.navigationController.navigationBar setTitleVerticalPositionAdjustment:-40.0 forBarMetrics:UIBarMetricsDefault];
[self.navigationItem.leftBarButtonItem setBackgroundVerticalPositionAdjustment:-40.0 forBarMetrics:UIBarMetricsDefault];
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
CGRect rect = self.navigationController.navigationBar.frame;
self.navigationController.navigationBar.frame = CGRectMake(rect.origin.x,rect.origin.y,rect.size.width,44);
[self.navigationController.navigationBar setTitleVerticalPositionAdjustment:0.0 forBarMetrics:UIBarMetricsDefault];
}
但尝试这么做了,结果导航栏无动于衷。
方法二:
UINavigationBar *bar = [self.navigationController navigationBar];
CGFloat navBarHeight = 35.0f;
CGRect frame = CGRectMake(0.0f, 20.0f, 320.0f, navBarHeight);
[bar setFrame:frame];
其实这种方法跟方法一是一样的。
方法三:后来无意间想到,可以自定义导航栏,于是乎就这么做了:
UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44 + 38)];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:customView.frame];
imageView.image = [UIImage imageNamed:@"caidanlan"];
[customView addSubview:imageView];
[self.navigationController.navigationBar addSubview:customView];
于是,通过
addSubview的方式达到预想的结果。