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

使用.navigationBarTitleDisplayMode(.inline)导致Xcode预览崩溃求助

关于.navigationBarTitleDisplayMode(.inline)导致Xcode预览崩溃的问题分析与解决

问题详情

在使用.navigationBarTitleDisplayMode(.inline)时,Xcode预览会频繁崩溃,复现步骤如下:

  • 在Xcode预览界面点击list.bullet.rectangle.fill按钮打开弹窗
  • 关闭弹窗后重复操作第二次,预览直接崩溃

使用环境:Xcode 14.2 (14C18)

相关代码:

import SwiftUI

struct PDFTableContentsView: View {
    var body: some View {
        Text("PDF Table Contents View")
        .bold()
        .underline()
    }
}

struct PDFContentView: View {
    @State private var showContents: Bool = false
    
    var body: some View {
        VStack {
            Text("Hello, World!")
        }
        .navigationTitle("PDF Title")
        .navigationBarTitleDisplayMode(.inline)
        .toolbar {
            ToolbarItem(placement: .navigationBarTrailing) {
                Button {
                    showContents.toggle()
                } label: {
                    Image(systemName: "list.bullet.rectangle.fill")
                }
            }
        }
        .sheet(isPresented: $showContents) {
            PDFTableContentsView()
        }
    }
}

struct PDFContentView_Previews: PreviewProvider {
    static var previews: some View {
        NavigationView {
            PDFContentView()
        }
    }
}

原因分析

这并非你的代码使用错误,而是Xcode 14.2预览器的已知兼容性bug——当NavigationView、.navigationBarTitleDisplayMode(.inline)和sheet组合使用时,预览环境的视图生命周期管理出现异常,导致重复打开/关闭sheet时触发崩溃。

解决方案

方案1:使用新的NavigationStack(推荐,iOS 16+)

NavigationView在iOS 16及以上已被弃用,替换为NavigationStack可彻底解决该预览崩溃问题,同时获得更稳定的导航功能:

struct PDFContentView_Previews: PreviewProvider {
    static var previews: some View {
        NavigationStack {
            PDFContentView()
        }
    }
}

方案2:为NavigationView添加视图样式(兼容iOS 15及以下)

如果需要兼容旧系统版本,可在预览中添加.navigationViewStyle(.stack)来规避bug:

struct PDFContentView_Previews: PreviewProvider {
    static var previews: some View {
        NavigationView {
            PDFContentView()
        }
        .navigationViewStyle(.stack)
    }
}

方案3:修复预览环境

若上述代码调整无效,可尝试清理Xcode缓存来修复预览器状态:

  • 关闭Xcode,删除Derived Data文件夹(路径:~/Library/Developer/Xcode/DerivedData)
  • 重启Xcode并重新加载预览

内容的提问来源于stack exchange,提问作者F. Zer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:20:40