自定義系統的navigationBar高度以及移動Item位置

 


若是想在系統的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];

 

 

 


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

相關文章
相關標籤/搜索