iOS 11中如何修改UINavigationBar的高度?
嘿,我来帮你搞定这个问题!你试的两种方法在 iOS 11 里没生效,其实是因为苹果从 iOS 11 开始调整了 UINavigationBar 的布局逻辑,老方法已经不适用啦。先给你分析下为什么那两种方法失效:
- 方法一直接修改 frame:iOS 11 之后导航栏完全由 Auto Layout 管理,你手动设置的 frame 会被系统的布局约束自动修正,所以根本留不住自定义的高度。
- 方法二重写
sizeThatFits:这个方法在 iOS 11 之后不再是导航栏高度的核心决定因素,系统优先参考intrinsicContentSize和内置约束,所以重写它不会有效果。
下面给你两种可行的解决方案,按需选择:
方案一:自定义导航栏(推荐)
通过自定义 UINavigationBar 并重写 intrinsicContentSize 属性,让系统认可你的自定义高度:
class CustomNavigationBar: UINavigationBar { // 这里设置你想要的导航栏高度 var customHeight: CGFloat = 100 override var intrinsicContentSize: CGSize { return CGSize(width: UIScreen.main.bounds.width, height: customHeight) } }
然后在初始化导航控制器时,指定使用这个自定义导航栏:
// 初始化导航控制器时传入自定义导航栏类 let navController = UINavigationController(navigationBarClass: CustomNavigationBar.self, toolbarClass: nil) // 如果你是在 Storyboard 里使用,需要手动替换导航栏的类为 CustomNavigationBar
方案二:通过占位视图撑开高度(无需自定义导航栏)
如果不想自定义导航栏,可以给导航栏添加一个占位视图,用约束强制撑开高度:
override func viewDidLoad() { super.viewDidLoad() // 关闭导航栏半透明,避免布局偏移 navigationController?.navigationBar.isTranslucent = false navigationController?.navigationBar.barTintColor = .white let targetHeight: CGFloat = 100 let extraHeight = targetHeight - 44 // 44 是 iOS 导航栏的默认高度 // 创建占位视图 let spacerView = UIView() spacerView.translatesAutoresizingMaskIntoConstraints = false navigationController?.navigationBar.addSubview(spacerView) // 添加约束,让占位视图撑开导航栏高度 NSLayoutConstraint.activate([ spacerView.heightAnchor.constraint(equalToConstant: extraHeight), spacerView.widthAnchor.constraint(equalTo: navigationController!.navigationBar.widthAnchor), spacerView.topAnchor.constraint(equalTo: navigationController!.navigationBar.topAnchor), spacerView.centerXAnchor.constraint(equalTo: navigationController!.navigationBar.centerXAnchor) ]) // 可选:调整标题视图的位置,让它居中在自定义高度的导航栏里 if let titleView = navigationItem.titleView { titleView.translatesAutoresizingMaskIntoConstraints = false titleView.centerYAnchor.constraint(equalTo: spacerView.centerYAnchor).isActive = true } }
注意:如果你的导航栏需要半透明效果,需要额外调整布局,避免内容被导航栏遮挡。
内容的提问来源于stack exchange,提问作者dre_84w934
相关产品推荐
相关产品推荐

