修改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
相关产品推荐
相关产品推荐

