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

iPad侧边栏显示时选中特定Tab致SplitView崩溃求助

iOS 18 侧边栏适配TabView与SplitView崩溃及状态异常问题

环境信息

  • 最低部署版本:iOS 18
  • 模拟器版本:18.2
  • Swift版本:16.2

场景说明

当前使用iOS 18新增的TabView组件,通过TabSection对Tab进行分组管理,应用主要面向iPad部署,必须保留SplitView多应用分屏功能(已在info.plist中将"Requires Full Screen"设为NO)。

因实际应用包含14个Tab,未分组的独立Tab存在数量限制,因此必须保留TabSection分组结构。移除分组后所有问题消失,但无法满足业务需求。

具体问题

  1. 崩溃问题:iPad横屏且显示侧边栏(标准布局)时,选中"Location Brief"或"Restricted Area Brief" Tab会导致应用崩溃,报错信息如下:

    SwiftUI/SidebarAdaptableTabViewStyle_iOS.swift:482: Fatal error: Tried to update with invalid selection value
    

    若隐藏侧边栏(仅显示顶部菜单),所有Tab均可正常使用SplitView。

  2. 侧边栏选中状态粘连:在侧边栏中先选中"Location Brief",再切换到"Area Brief",内容视图正常切换,但侧边栏的选中高亮状态仍停留在"Location Brief"上。

  3. Tab自动切换问题:SplitView中激活"NOTAM" Tab,当分屏比例为50/50或更大时,将视图缩小至该比例以下,会自动切换到"Area Brief" Tab。

复现代码

App入口代码

import SwiftUI

@main
struct scrapAppApp: App {
    var body: some Scene {
        WindowGroup {
            MenuView()
        }
    }
}
import SwiftUI

struct MenuView: View {
    
    @AppStorage("MyAppTabViewCustomization")
    private var customization: TabViewCustomization
    
    @State private var selectedTab: Tabs?
    
    enum Tabs: String, Hashable, CaseIterable {
        case planner, plan, weather, locationbrief, areabrief, additional, notam, restrictedBrief, appSettings, settings
        
        var customizationID: String {
            rawValue
        }
    }
    
    var body: some View {
        TabView(selection: $selectedTab) {
            TabSection("Planner") {
                
                Tab("Plan", systemImage: "paperplane", value: Tabs.plan) {
                    Text("Plan")
                }.customizationID(Tabs.plan.customizationID)
            }.customizationID(Tabs.planner.customizationID)
            
            
            TabSection("Weather") {
                
                Tab("Location Brief", systemImage: "mappin.square", value: Tabs.locationbrief) {
                    Text("Location Brief") // 此处会崩溃
                }.customizationID(Tabs.locationbrief.customizationID)
                
                Tab("Area Brief", systemImage: "map", value: .areabrief) {
                    Text("Area Brief")
                }.customizationID(Tabs.areabrief.customizationID)

            }.customizationID(Tabs.weather.customizationID)
            
            
            TabSection("Additional") {
                
                Tab("NOTAM", systemImage: "text.document", value: Tabs.notam) {
                    Text("NOTAM")
                }.customizationID(Tabs.notam.customizationID)
                
                Tab("Restricted Area Brief", systemImage: "xmark.seal", value: .restrictedBrief) {
                    Text("Restricted Area Brief") // 此处会崩溃
                }.customizationID(Tabs.restrictedBrief.customizationID)
                
            }.customizationID(Tabs.additional.customizationID)
            
            
            TabSection("App Settings") {
                
                Tab("Settings", systemImage: "gear", value: Tabs.settings) {
                    Text("Settings")
                }.customizationID(Tabs.settings.customizationID)
                
            }.customizationID(Tabs.appSettings.customizationID)
        }
        .tabViewStyle(.sidebarAdaptable)
        .tabViewCustomization($customization)
    }
}

#Preview {
    MenuView()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:04:59