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

SwiftUI navigationTitle显示位置异常 触发Xcode布局警告

问题现象

项目子视图运行效果如下:
navigationTitle位置异常运行截图
异常表现:

  • navigationTitle 显示位置异常偏低
  • 拖动滚动表单时Xcode抛出布局警告
  • 代码可成功构建,但交互滚动时触发上述异常
原始实现代码
import SwiftUI

struct DetailedView: View {
    var referFood:ReferFood
    @StateObject var recentFood=RecentSearched()
    var body: some View {
        NavigationView{
                Form{
                    Section("名称")
                    {
                        Text("\(referFood.name)")
                    }
                    Section("保质期")
                    {
                        Text("\(referFood.qualityTime)")
                    }
                    Section("储藏方法")
                    {
                        Text("\(referFood.method)")
                    }
                }.navigationTitle("详细信息")
                .navigationBarTitleDisplayMode(.inline)
        }
    }
}
故障原因

核心问题是子视图重复嵌套了NavigationView。
导航容器只需要在导航栈的最外层根视图放置一次,如果你这个DetailedView是从上层页面通过导航push/pushDestination跳转打开的,子页面内部额外包裹NavigationView会生成两层独立的导航栏。当滚动表单触发系统导航栏标题模式切换的逻辑时,双层导航栏会引发约束计算冲突,直接导致标题位置错位、控制台输出布局警告。

修复方案

删除子视图内部多余的NavigationView包裹即可,修复后代码如下:

import SwiftUI

struct DetailedView: View {
    var referFood:ReferFood
    @StateObject var recentFood=RecentSearched()
    var body: some View {
        Form{
            Section("名称")
            {
                Text("\(referFood.name)")
            }
            Section("保质期")
            {
                Text("\(referFood.qualityTime)")
            }
            Section("储藏方法")
            {
                Text("\(referFood.method)")
            }
        }
        .navigationTitle("详细信息")
        .navigationBarTitleDisplayMode(.inline)
    }
}

补充提示:iOS 16及以上系统推荐使用NavigationStack替代已被废弃的NavigationView,新项目建议直接迁移到新导航API,可大幅减少导航层级相关的布局异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:45:19