如果想在系统的navigationBar上修改.
那么你需要在navigationController的根控制器
的viewWillAppear和viewDidAppear里都调用下面的方法.
自定义的titleView进行移动有效.
注意:
leftBarButtonItem和rightBarButtonItem只能用系统的方法创建出来,如果你是创建一个UIButton然后转换成leftBarButtonItem,
则向y值移动代码无效
也就是说
如果你的left/rightBarButtonItem只要不是被系统的方法创建出来,
而且你想改变navigationBar高度,
那么我的办法就只有自定义了
就是创建一个View然后添加到navigationBar中
所以你不能用navigationBar的自带属性
里面的frame都要自己设置
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 70)];
view.backgroundColor = [UIColor orangeColor];
[self.navigationController.navigationBar addSubview:view];
OC
#pragma mark - 自定义navigationBar的frame
- (void)customNavigationBarFrame {
[self printViewHierarchy:self.navigationController.navigationBar];
// 在这里是 不能直接修改 一个控件的 height 你需要UIView的分类
// UIView的分类 必备
// 如果你没有 请联系我
//修改NavigaionBar的高度
self.navigationController.navigationBar.height += <#你要增加的值#>;
NSLog(@"\n修改后");
[self printViewHierarchy:self.navigationController.navigationBar];
/// -------------- 向 y 进行移动 ---------------
[self.navigationController.navigationBar setTitleVerticalPositionAdjustment:-40.0 forBarMetrics:UIBarMetricsDefault];
//[self.navigationItem.backBarButtonItem setBackgroundVerticalPositionAdjustment:-40.0 forBarMetrics:UIBarMetricsDefault];
[self.navigationItem.leftBarButtonItem setBackgroundVerticalPositionAdjustment:-40.0 forBarMetrics:UIBarMetricsDefault];
[self.navigationItem.rightBarButtonItem setBackgroundVerticalPositionAdjustment:-40.0 forBarMetrics:UIBarMetricsDefault];
}#pragma mark - 这只是个打印
- (void)printViewHierarchy:(UIView *)superView {
static uint level = 0;
for(uint i = 0; i < level; i++){
printf("\t");
}
const char *className = NSStringFromClass([superView class]).UTF8String;
const char *frame = NSStringFromCGRect(superView.frame).UTF8String;
printf("%s:%s\n", className, frame);
++level;
for(UIView *view in superView.subviews){
[self printViewHierarchy:view];
}
--level;
}
Swift
// MARK: 自定义navigationBar的frame属性
func customNavigationBarFrame() {
// 在这里是 不能直接修改 一个控件的 height 你需要UIView的分类
// UIView的分类 必备
// 如果你没有 请联系我
//修改NavigaionBar的高度
navigationController!.navigationBar.height += 50;
/// -------------- 向 y 进行移动 ---------------
// 移动 title
navigationController?.navigationBar.setTitleVerticalPositionAdjustment(-20, forBarMetrics: .Default);
//navigationItem.backBarButtonItem?.setBackgroundVerticalPositionAdjustment(-40, forBarMetrics: .Default);
navigationItem.leftBarButtonItem?.setBackgroundVerticalPositionAdjustment(-40, forBarMetrics: .Default);
navigationItem.rightBarButtonItem?.setBackgroundVerticalPositionAdjustment(-40, forBarMetrics: .Default);
}
这篇文章是我结合下面二章 得出的结果
修改navigationBar高度
学自:https://segmentfault.com/q/1010000000326847
向y值进行移动
学自: http://www.tuicool.com/articles/36vIri