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

如何在最新版Xcode及iOS系统中调整Navigation Bar高度(无需自定义头部视图)?

无需自定义头部视图调整导航栏高度的方法

嘿,我太懂你在新版本Xcode和iOS里调整导航栏高度的纠结了——现在系统对导航栏的布局管控确实比以前严,但不用自定义头部视图也能搞定,给你分享两个实用方案:

方案1:子类化UINavigationBar(最稳定可靠)

这是iOS 11+之后官方推荐的做法,通过自定义导航栏子类来控制它的固有尺寸,完全不用替换成自定义头部视图:

首先创建一个UINavigationBar的子类,重写intrinsicContentSize来指定你想要的导航栏高度(比如我这里设为80pt,你可以按需修改):

class CustomHeightNavigationBar: UINavigationBar {
    override var intrinsicContentSize: CGSize {
        // 这里的height就是你要的导航栏自身高度
        return CGSize(width: UIScreen.main.bounds.width, height: 80)
    }
    
    // 可选:调整导航栏内部元素(标题、左右按钮)的位置,避免偏移到奇怪的地方
    override func layoutSubviews() {
        super.layoutSubviews()
        // 让标题视图垂直居中
        titleView?.center = CGPoint(x: bounds.midX, y: bounds.midY)
        // 遍历调整所有导航按钮的垂直位置
        for subview in subviews {
            if let navButton = subview as? UIButton {
                navButton.center.y = bounds.midY
            }
        }
    }
}

接下来在你的导航控制器中使用这个子类:

  • 如果是纯代码创建导航控制器:
let navController = UINavigationController(navigationBarClass: CustomHeightNavigationBar.self, toolbarClass: nil)
navController.viewControllers = [YourRootViewController()]
  • 如果是用Storyboard开发:选中导航栏,在右侧Identity Inspector面板里,把Class改成CustomHeightNavigationBar即可。

方案2:直接调整导航栏Frame(适合快速测试)

如果你不想写子类,这个方法可以快速实现,但稳定性稍差(横竖屏切换或系统布局更新可能会重置):

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    // 设置导航栏高度为80pt
    guard let navBar = navigationController?.navigationBar else { return }
    navBar.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 80)
    // 调整页面内容的安全区域内边距,避免被增高的导航栏遮挡
    let defaultNavBarHeight = UINavigationController().navigationBar.frame.height
    additionalSafeAreaInsets.top = 80 - defaultNavBarHeight
}

// 可选:横竖屏切换时重新设置,避免高度被重置
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    guard let navBar = navigationController?.navigationBar else { return }
    navBar.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 80)
}

小提示

  • 系统默认的导航栏自身高度是44pt(全面屏设备的状态栏额外占44pt,总顶部高度88pt),所以设置高度时别低于这个值,避免布局错乱。
  • 如果需要调整整个顶部区域(状态栏+导航栏)的总高度,你可以结合UIApplication.shared.statusBarFrame.height来计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:42:33