若是想在系統的navigationBar上修改.segmentfault
那麼你須要在navigationController的根控制器ui
的viewWillAppear和viewDidAppear裏都調用下面的方法.spa
自定義的titleView進行移動有效.get
注意:it
leftBarButtonItem和rightBarButtonItem只能用系統的方法建立出來,若是你是建立一個UIButton而後轉換成leftBarButtonItem,io
則向y值移動代碼無效class
也就是說方法
若是你的left/rightBarButtonItem只要不是被系統的方法建立出來,static
並且你想改變navigationBar高度,移動
那麼個人辦法就只有自定義了
就是建立一個View而後添加到navigationBar中
因此你不能用navigationBar的自帶屬性
裏面的frame都要本身設置
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 70)];
view.backgroundColor = [UIColor orangeColor];
[self.navigationController.navigationBar addSubview:view];
#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;
}
// 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值進行移動