You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Xcode中导航栏高度后,如何调整导航栏标题位置?

嘿,作为iOS新手碰到这种导航栏布局的坑太正常啦!我来帮你拆解问题,一步步解决~

首先,你直接遍历导航栏子视图修改BarBackground的frame,其实在iOS 11+之后不太靠谱——因为导航栏的布局是Auto Layout驱动的,你手动改的frame很容易被系统的约束给覆盖回去。而且就算背景高度改了,标题视图的位置还是跟着系统默认的导航栏布局走,自然看起来没变化。

给你两个关键的修正方向,结合起来就能搞定:

1. 正确修改导航栏高度(用约束而非直接改frame)

别在viewDidAppear里重复执行修改逻辑,放到viewDidLoad里更合适。用约束来调整高度,能避免被系统重置:

override func viewDidLoad() {
    super.viewDidLoad()
    setupCustomNavigationBar()
}

func setupCustomNavigationBar() {
    guard let navBar = navigationController?.navigationBar else { return }
    
    // 调整导航栏高度:找到已有高度约束修改,没有就新增
    if let heightConstraint = navBar.constraints.first(where: { $0.firstAttribute == .height }) {
        heightConstraint.constant = 75
    } else {
        let heightConstraint = NSLayoutConstraint(
            item: navBar,
            attribute: .height,
            relatedBy: .equal,
            toItem: nil,
            attribute: .notAnAttribute,
            multiplier: 1,
            constant: 75
        )
        navBar.addConstraint(heightConstraint)
    }
}

2. 调整图片标题的位置

如果你的标题是自定义的UIImageView,直接控制它的frame或者用系统提供的调整属性就行:

方法一:自定义titleView并设置frame

// 接上上面的setupCustomNavigationBar方法
// 创建图片标题视图
let titleImage = UIImage(named: "your-title-image")!
let titleImageView = UIImageView(image: titleImage)
titleImageView.contentMode = .scaleAspectFit

// 手动设置frame,通过y值调整上下位置(比如向下偏移10pt)
titleImageView.frame = CGRect(x: 0, y: 10, width: 120, height: 40)
navigationItem.titleView = titleImageView

方法二:用系统API调整垂直位置

如果是系统默认的标题样式,或者不想自定义frame,可以用这个属性快速调整:

// 正数=向下偏移,负数=向上偏移
navBar.setTitleVerticalPositionAdjustment(10, for: .default)

最后提醒下:如果你的项目里多个页面都要这个导航栏样式,最好自定义一个UINavigationController子类,在子类里统一设置导航栏高度和标题样式,这样不用每个ViewController都写一遍代码~

内容的提问来源于stack exchange,提问作者Wei Su

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:16:08