Xcode9.2中iPhone5模拟器UINavigationBar过高问题求助
这种小屏设备上导航栏显示异常的情况我之前开发时也遇到过,结合你的场景(根视图控制器、已清空Prompt),给你几个具体的排查和解决方向:
检查是否手动设置了导航栏固定高度
如果你在Storyboard或者代码里给导航栏加了固定高度的约束,那在iPhone 5这种小屏设备上就会因为硬编码高度导致显示异常。建议移除手动设置的高度约束,让导航栏使用系统默认的自适应高度(状态栏20pt + 导航栏44pt,合计64pt)。确认状态栏适配设置
打开项目的Info.plist,检查View controller-based status bar appearance是否设置为YES;同时在你的根ViewController中,确保没有错误重写状态栏相关方法。如果状态栏的显示逻辑异常,会导致导航栏的顶部间距计算错误,进而拉长导航栏。排查自定义导航栏的代码
看看你有没有在viewDidLoad、viewWillAppear等方法里修改过导航栏的frame、bounds,或者手动调整过布局边距。比如类似navigationController?.navigationBar.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 70)这种硬编码高度的代码,会直接破坏系统的自适应布局。如果有这类代码,建议删除或者改成自适应逻辑。重置导航栏样式并强制适配
在根ViewController的viewWillAppear方法里添加以下代码,强制导航栏按照系统规则调整尺寸:override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) navigationController?.navigationBar.prompt = nil navigationController?.navigationBar.isTranslucent = false // 可根据需求调整为true,半透明属性会影响布局计算 navigationController?.navigationBar.sizeToFit() }sizeToFit()方法会让导航栏根据当前设备的屏幕尺寸自动计算合适的高度。检查Storyboard的相关设置
如果你是用Storyboard创建的导航控制器,选中Navigation Controller后,在右侧Attributes Inspector里:- 确认没有勾选“Prefers Large Titles”(iOS 11+特性,小屏设备上可能导致导航栏高度异常)
- 检查根ViewController的顶部约束,确保是关联到
Top Layout Guide而非导航栏的底部,这样系统会自动处理不同设备的顶部间距。
内容的提问来源于stack exchange,提问作者Kelly

