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

Swift 4:如何解决无法通过编程修改自定义导航栏高度的问题?

解决自定义Navigation Bar高度无法修改的问题

嘿,我之前也踩过自定义导航栏高度改不动的坑!给你几个亲测有效的解决思路:

  • 重写导航栏的sizeThatFits方法
    这是最直接的方式,告诉系统导航栏的理想尺寸。在自定义导航栏类里加上这段代码:

    class CustomNavigationBar: UINavigationBar {
        override func sizeThatFits(_ size: CGSize) -> CGSize {
            // 把80改成你想要的高度值
            return CGSize(width: UIScreen.main.bounds.width, height: 80)
        }
    }
    

    这个方法会覆盖系统默认的尺寸计算逻辑,适合替换系统导航栏的场景。

  • 用Auto Layout强制锁定高度
    如果你的自定义导航栏是作为子视图添加到ViewController里的,直接给它加上高度约束:

    let customNavBar = CustomNavigationBar()
    customNavBar.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(customNavBar)
    
    NSLayoutConstraint.activate([
        customNavBar.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
        customNavBar.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        customNavBar.trailingAnchor.constraint(equalTo: view.trailingAnchor),
        customNavBar.heightAnchor.constraint(equalToConstant: 80)
    ])
    

    记得一定要把translatesAutoresizingMaskIntoConstraints设为false,不然自定义约束会和系统自动布局规则冲突。

  • 注意系统导航栏的透明属性
    如果你是基于系统UINavigationBar做自定义,别忘了把isTranslucent设为false——透明状态下系统会自动调整导航栏的高度和布局,导致你设置的高度不生效:

    navigationController?.navigationBar.isTranslucent = false
    

另外提个小细节:iOS13之后导航栏的内部结构有变化,如果你的自定义导航栏里嵌套了子视图,也要给子视图正确设置约束,避免被挤压变形。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:48:46